我只是明白 LinkedHashSet 在插入时不允许重复元素。但是,我不明白 Hashset 在 Hava 中是如何工作的?我知道在 Hashset 中使用了 Hashtable,因此哈希表用于存储元素,这里也不允许重复元素。然后,Treeset 也类似于 Hashset,它也不允许重复的条目,因此可以看到唯一的元素,并且它遵循升序。
我对 HashMap 还有一个疑问 - Hashmap 不维持秩序。它可能有一个空键和多个空值。我只是不明白这一点,这实际上是什么意思?有什么实际的例子吗?
我知道一点,Hashmap 曾经基于此工作 - 用于放入存储桶的键和值也存储桶具有唯一编号。这样,就可以从桶中识别并获取键和值。当我将键/值对放入其中标识符是键的哈希码的桶中时。
例如:键的哈希码是101,所以它存储在桶101中。一个桶可以存储多个键和值对。假设 Object1 是“A”,object2 是“A”,object3 是“B”,那么它具有相同的 Hash 码。因此,它通过在同一个桶中共享相同的 Hashcode 来存储不同的对象。我的疑问是,具有相同哈希码的对象应该相等,不同的对象应该有不同的哈希码?
这是使用 HashSet 的程序:
import java.util.*;
public class Simple{
public static void main(String[] args){
HashSet hh=new HashSet();
hh.add("D");
hh.add("A");
hh.add("B");
hh.add("C");
hh.add("a");
System.out.println("Checking the size is:"+hh.size()+"");
System.out.println(hh);
Iterator i=hh.iterator();
while(i.hasNext()){
System.out.println(i.next());
}
}
}
输出是,
Checking the size is:5
[D, A, B, a, C]
D
A
B
a
C
我的疑问是,为什么“a”插入在“B”和“C”之间。
现在,我正在使用 LinkedHashSet 所以,
public class Simple{
public static void main(String[] args){
LinkedHashSet hh=new LinkedHashSet();
hh.add("D");
hh.add("A");
hh.add("B");
hh.add("C");
hh.add("a");
System.out.println("Checking the size is:"+hh.size()+"");
System.out.println(hh);
Iterator i=hh.iterator();
while(i.hasNext()){
System.out.println(i.next());
}
}
}
我只是明白,它遵循插入顺序并且避免重复元素。所以输出是,
Checking the size is:5
[D, A, B, C, a]
D
A
B
C
a
现在,使用树集:
import java.util.*;
public class Simple{
public static void main(String[] args){
TreeSet hh=new TreeSet();
hh.add("1");
hh.add("5");
hh.add("3");
hh.add("5");
hh.add("2");
hh.add("7");
System.out.println("Checking the size is:"+hh.size()+"");
System.out.println(hh);
Iterator i=hh.iterator();
while(i.hasNext()){
System.out.println(i.next());
}
}
}
在这里,我只是明白- Treeset 遵循升序。
The output is,
Checking the size is:5
[1, 2, 3, 5, 7]
1
2
3
5
7
那么我的疑问是,Hashset 在 Java 中是如何工作的?而且我知道 LinkedHashset 遵循双链表。如果它使用双向链表,那么它如何存储元素?双向链表是什么意思,它是如何工作的?那么这三个Hashset,Treeset,LinkedHashset在Java中会在哪里使用,哪一个在Java中性能更好呢?