java - ArrayList<String>,String的HashMap不正常?

标签 java string arraylist hashmap

所以,我想制作一个字符串列表到字符串的映射,但我无法让它正常工作:

这是我完成的所有代码,在我找出原因之前,我无法继续:

Map<List<String>, String> test = new HashMap<List<String>, String>();
test.put( new ArrayList<String>(), "s1");
test.put( new ArrayList<String>(), "s2");
test.put( new ArrayList<String>(), "s3");

System.out.println(test.size());

我得到1,应该是3!! 为什么当我为 3 个单独的对象进行 3 次调用时只添加了一个对象?我知道不小心将同一对象添加到集合中的危险,但我专门为每次放置创建了一个新的 ArrayList,从而创建了一个全新的对象。

那么为什么Map中只有一个对象呢? 谢谢!

最佳答案

ArrayList#hashCode() 为它们返回相同的值。如果您查看它的来源:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/AbstractList.java#AbstractList.hashCode%28%29

你可以看到如果没有元素,或者所有相同的元素,hashCode 将是相同的。

修复它,它应该可以正常工作。使用 Map 或以一种或另一种方式更改 hashCode。

关于java - ArrayList<String>,String的HashMap不正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14825906/

相关文章:

Java:将英语动词转换为特定时态

c - 这个C语言程序有什么问题吗?它终止了。我很难理解指针指针中的读取输入字符串

java - Arraylist Remove() 不起作用

java - appengine-web.xml - XML 错误验证

java - 如何将 ByteBuffer 转换为 Bitmap Image?

Java if else 语句改变字符串

c++ - 结构和文件

python - 代码 Python 3 的问题

java - 在java中删除一个对象,仅在数组列表中引用它

java - EJB 模块和 HTTP 路由器模块之间的通用绑定(bind)