Java ArrayList<;X>;在HashMap中用作键,但X[]的数组不';行不通
当我试图将数组和arraylist作为键放入映射时,遇到了这个问题。 第一段代码:Java ArrayList<;X>;在HashMap中用作键,但X[]的数组不';行不通,java,arrays,collections,hashmap,Java,Arrays,Collections,Hashmap,当我试图将数组和arraylist作为键放入映射时,遇到了这个问题。 第一段代码: LinkedHashMap<ArrayList<String>, String> lhm = new LinkedHashMap<ArrayList<String>, String>(); for (int i =0;i < strs.length; i++){ ArrayList<String> arr =
LinkedHashMap<ArrayList<String>, String> lhm = new LinkedHashMap<ArrayList<String>, String>();
for (int i =0;i < strs.length; i++){
ArrayList<String> arr = new
ArrayList<String>(Arrays.asList(strs[i].toLowerCase().split(" ")));
Collections.sort(arr);
lhm.put(arr, strs[i]);
}
LinkedHashMap lhm=new LinkedHashMap();
对于(int i=0;i
第二段代码:
LinkedHashMap<String[], String> lhm = new LinkedHashMap<String[], String>();
for (int i =0;i < strs.length; i++){
String[] str = strs[i].toLowerCase().split(" ");
Arrays.sort(str);
System.out.println("***********");
for (String strin :str)
{
System.out.println(strin);
}
System.out.println("***********");
lhm.put(str, strs[i]);
}
LinkedHashMap lhm=new LinkedHashMap();
对于(int i=0;i
第一段代码的工作原理与预期一样,每当我放置一个重复的键(Arraylist作为相同内容的键),它就会覆盖上一个键的值。
但第二件事并没有如预期的那样奏效。它只是把所有的价值都放进去了。
有人能解释一下这是怎么回事吗?
将Array/ArrayList(或者集合作为键)放在一起是一种好的做法吗 Java中的数组使用从对象继承的默认equals方法。hashCode方法也是如此。因此,即使将数组中的元素与键相同,最终也会出现“重复”。另一方面,列表重写hashcode方法,以返回更能代表其内容的值 在任何情况下,在hashmap中使用可变对象作为键通常都不是一个好主意,尽管在某些情况下这是不可避免的。特别是使用集合作为键可能会以多种方式绊倒您
- 向列表中添加元素
- 改变列表中的对象,使其哈希代码/相等约定发生变化
Arrays.asList()
已经提供了一个列表
,您不需要创建一个新的arraylist
@pst-同意。在这种情况下,问题在于动词,而不是名词。我调低了一些“修辞”。@好的,数组不会覆盖hashcode()和equals()函数。所以,Map认为它们是不同的键。明白了,谢谢