ArrayList.size()和Set.size()JAVA之间的差异

时间:2014-05-15 08:07:55

标签: java arraylist set

我有一个包含1605条记录的resultSet。当我将resultSet添加到arrayList时,我得到的大小是1605,而当我将resultSet添加到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());

我得到的输出是:

    list_of_genes for strain 1: 1605
    SET genes for strain 1 :1598

4 个答案:

答案 0 :(得分:2)

HashSet是一个Set,这意味着它不允许存储重复项。这是java中Sets的定义。因此,您的列表可能包含重复项,这些重复项会在添加到HashSet时删除,因此会有差异。

以下是java docs.中定义的Set的定义。有关详细信息,请查看它。

  

不包含重复元素的集合。更正式的,集合   不包含元素e1和e2对,使得e1.equals(e2)和at   大多数一个null元素。正如其名称所暗示的,这个界面模型   数学集抽象。

答案 1 :(得分:0)

Set排除重复项,因此Set仅包含唯一的。

答案 2 :(得分:0)

在HashSet中,您可以注意到有一个重复项(在本例中为具有相同内容的字符串),包含的所有项都是唯一的,而在List中,您可以拥有多个具有相同值的String。

在结果set gene_strain_1中肯定有重复的项目。因此,它们将被添加到仅在第一次出现时设置(而不是第二次,第三次等),而它们将始终添加到列表中。事实上,List包含与原始项目相同数量的项目(1605),而HashSet更少(仅1598)。

听起来很奇怪的是,你说你的对象gene_strain_1是一个resultSet,即已经是一个它最初不应该包含重复项的Set。

您确定gene_strain_1 is a Set

答案 3 :(得分:0)

这可能是因为你resultSet中的重复词语很少。

让我们说你有

One
Two
Three
One

有4个项目。在数组中,您将有4个项目,但在hashmap中您将拥有3个项目,因为它通过键/值保存值。如果它已经有One密钥,它将替换之前的值。