Java ArrayList.size()和Set.size()之间存在差异

Java ArrayList.size()和Set.size()之间存在差异,java,arraylist,set,Java,Arraylist,Set,我有一个结果集,有1605条记录。当我将结果集添加到arrayList时,得到的大小是1605,而当我将结果集添加到HashSet数据结构时,它打印的大小是1598。我不知道为什么会有这种差异 Set<String> list_of_genes_strain_1 = new HashSet<>(); ArrayList<String> list_of_genes = new ArrayList<>(); // Loop th

我有一个结果集,有1605条记录。当我将结果集添加到arrayList时,得到的大小是1605,而当我将结果集添加到HashSet数据结构时,它打印的大小是1598。我不知道为什么会有这种差异

    Set<String> list_of_genes_strain_1 = new HashSet<>();
    ArrayList<String> list_of_genes = new ArrayList<>();
    // Loop through result sets
    while(gene_strain_1.next()){
      String gene_name = gene_strain_1.getString(1);
      list_of_genes_strain_1.add(gene_name); // add to set
      list_of_genes.add(gene_name); // add to arrayList
     }
    System.out.println("list_of_genes for strain 1: " + list_of_genes.size());
    System.out.println("SET genes for strain 1 :" + list_of_genes_strain_1.size());
HashSet是一个集合,这意味着它不允许存储重复项。这是java中集合的定义。因此,您的列表可能有重复项,这些重复项在添加到HashSet时会被删除,从而产生差异

以下是在中定义的集合的定义,请查看以了解更多信息

不包含重复元素的集合。更正式地说,设置 不包含元素e1和e2对,因此e1.Equals2和at 大多数情况下只有一个空元素。正如其名称所暗示的那样,该接口建模 数学集合抽象


集合排除重复项,因此集合只包含唯一的项。

在哈希集合中,您可以注意到有一个重复项。在这种情况下,具有相同内容的字符串,包含的所有项都是唯一的,而在列表中,您可以有多个具有相同值的字符串

可以肯定的是,在结果集gene_strain_1中存在重复项。因此,它们将仅在第一次出现时添加到集合中,而不会在第二次、第三次等出现时添加到集合中,同时它们将始终添加到列表中。事实上,该列表包含的项目数量与原来的1605项相同,而HashSet仅包含1598项

听起来奇怪的是,你说你的目标基因1是一个结果集,也就是说已经是一个集合了,它本来不应该包含重复的项目


你确定基因1是一个集合吗?

这可能是因为你的结果集中很少有重复的单词

假设你有

One
Two
Three
One

有4个项目。在数组中,您将有4项,但在hashmap中,您将有3项,因为它通过key/value保存值。如果已经有一个键,它将替换以前的值。

set只存储唯一的元素!!!谢谢,我以为我的结果集中有唯一的基因,但你是对的。是的,基因1是数据库查询的结果集对象。
One
Two
Three
One