当前位置: 首页 > 知识库问答 >
问题:

相同的键 - 具有哈希映射的不同值

申辉
2023-03-14

我会从我想达到的目标开始

意图

该软件在for循环中解析XML数据。处理数据的 for 循环将持续到 50(因为我得到了 50 个不同的结果)。我最初所做的是,doInBackground-方法解析整个XML数据并将其保存到TextViews中并显示它。但现在我想添加一个启动画面,只要数据加载就会显示。

XML文件像任何其他普通XML文件一样构建,因此当我通过for循环时,键总是相同的,但值不同。

方法

我已经做的是创建一个多维数组,但不幸的是,您不能使用String作为索引。这就是地图的用途。这是我的方法

stringArray[i]["source"] = sourceString;

好吧,然后我用地图尝试了一下。但是映射的问题在于,当新键再次出现时,它只会覆盖以前的键值对。

所以我想我会使用一个带有字符串集合的HashMap。我是这样处理的;首先我创建了HashMap

public HashMap <String, Collection<String>> hashMap = new HashMap<String, Collection<String>>();

然后我将每个键的数据放入HashMap中。

hashMap.put("source"        , new ArrayList<String>());

这就是我在 for 循环中所做的

hashMap.get("source").add(new String(((Node) sourceList.item(0)).getNodeValue()));

然后,当完成时,< code > onpost execute -方法启动一个新的intent并传递hashMap。

protected void onPostExecute(Void result) {
    super.onPostExecute(result);
    Intent i = new Intent(SplashScreen.this, MainActivity.class);
    i.putExtra("hashMap", hashMap);
    startActivity(i);
    finish();
}

在我的主活动中,我这样做是为了获取数据

Intent intent = getIntent();
HashMap<String, String> hashMap = (HashMap<String, String>)intent.getSerializableExtra("hashMap");
rankingDate = new TextView(this);
rankingDate.setText("RankingDate: " + hashMap.get("rankingDate"));
layout.addView(rankingDate);

但这会导致 ClassCastException:“ArrayList 不能强制转换为 java.lang.String”,在此行中。

< code > source . settext(" source:" hashmap . get(" source "));

我想这是因为hashMap.get(“source”)包含源数据的所有值。所以我尝试将所有数据保存在字符串数组中。但这没有用,但我不知道为什么。Eclipse 告诉我类型不匹配:无法从字符串转换为字符串[]

有什么建议吗?我非常想解决这个问题。

共有3个答案

葛承教
2023-03-14

使用地图列表。可以调用list.get(index)。get(“source”)后得到结果。

半伪代码:

List<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>

foreach(entry in document)
  map = new HashMap<String,String>();
  foreach(xml in entry)
   map.put(xml,xml.value)
  end
  list.put(index++,map)
end
毋城
2023-03-14

@Eng. Fouad答案是正确的,你在铸造中有一个错误。

您可以考虑使用MultiMap而不是集合映射:

http://guava-libraries.googlecode.com/svn/tags/release03/javadoc/com/google/common/collect/Multimap.html

封昊天
2023-03-14

你有一个错别字:

HashMap<String, String> hashMap = (HashMap<String, String>)intent.getSerializableExtra("hashMap");

应该是:

HashMap<String, Collection<String>> hashMap = (HashMap<String, Collection<String>>)intent.getSerializableExtra("hashMap");
 类似资料:
  • 我试图故意制造碰撞。 所以,我有和对象。我已经覆盖了Country的和方法,以便: india.hash代码()==india2.hash代码() 根据JavaHashMap中的冲突解决方案和文章“让这个国家对象在hashmap中”的一部分,如果key1的结果等于key2上的相同操作,那么应该会有冲突。 所以,我放置断点来查看的内容,并查看它的是2。也就是说,它包含两个不同的条目,并且没有link

  • 我有两个哈希要合并。它们看起来像这样: 第二个散列看起来像: 我想合并这两个散列数组,结果如下所示: 有没有一种简单的方法来合并这两个哈希,或者我必须逐个遍历哈希并在另一个哈希中找到该键?

  • 我可以有一个哈希图在Java看起来像这样吗? 我的问题和这里的类似问题 我是Java新手。所以我想知道的是,如果我需要上面这样的东西,如果它无效,什么是最好的数据结构?

  • 问题内容: Hashcode()和equals()的概念是 1)如果两个对象根据equal()相等,则在这两个对象中的每一个上调用hashcode方法应产生相同的哈希码。 另一个是 2)如果两个对象根据equal()不相等,则不需要在两个对象中的每一个上调用hashcode方法必须产生不同的值。 我尝试并理解了第一个,这是第一点的代码。 上面的程序为两个不同的对象提供了相同的哈希码。 有人可以用一

  • 我还将列表一中的和成员的每个哈希代码与列表二中成员的哈希代码进行了比较。而且没有区别。但是如果我比较完整列表的hashcode,就有区别了。我不知道为什么。我很无助。 也许有人能帮我。请提前向我致以最诚挚的问候和感谢。

  • 本文向大家介绍Java中并发哈希映射和同步哈希映射之间的区别,包括了Java中并发哈希映射和同步哈希映射之间的区别的使用技巧和注意事项,需要的朋友参考一下 并发Hashmap是jdk1.5中引入的类。并发哈希映射仅在添加或更新映射时在称为片段的存储桶级别应用锁。因此,并发哈希映射允许对映射进行并发读写操作。  同步hashmap(Collection.syncronizedHashMap())是C