java - 从存储重复元素的 Arrays.asList 创建的集合

标签 java arrays list collections set

我使用如下结构从对象数组中获取唯一元素。

dataList.put(column, new LinkedList<Object>(new HashSet<Object>(Arrays.asList(entry.getValue()))));

来自 entry.getValue() 的数组是一个包含 1 到 99 值的 100 元素数组,其中 1 重复两次。

文档说 Arrays.asList(arr[]) 方法返回一个与数组长度相同的固定长度列表。

我观察到创建的集合还包含原始数组给出的重复值。

请解释此行为。

更多详情。

我也尝试过使用 set.addAll(Arrays.asList(entry.getValue())); ,其中 set 是一个 HashSet 并得到相同的结果。

entry.getValue()返回的数组是java.lang.Short类型的数组

最佳答案

很可能,您没有在 entry.getValue() 返回的数组中的对象类中覆盖 equals()。尤其是因为您正在使用 HashSet,所以您也应该覆盖 hashCode(),以便它“同意”equals(),如根据 javadoc of equals() :

Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.

如果你不覆盖 equals(),每个实例都不会 equal() 到任何其他实例,尽管它的“值”是相同的,因为那是equals() 的默认实现,因此 Set 会将两个“1”对象视为“不同”。

关于java - 从存储重复元素的 Arrays.asList 创建的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21350098/

相关文章:

r - 使用 R 在 for 循环中创建具有不同名称的向量

python - 列表的最大元素的索引?

list - SwiftUI - 我想删除 "back button"和 .navigationbartitle 之间的空格

java - Spring Boot Rest Web服务在Get Request中获取多个参数

java - JTDS (Java/MSSQL) - 找不到存储过程

c - 无法理解 C 基础知识

c++ - 2D阵列井字游戏-我做错了什么?

java - java中的中断处理

java - URLConnection 不遵守 ReadTimeout

java - 使用数组作为方法 (Java)