我有一个包含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
答案 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
密钥,它将替换之前的值。