Я просто понимаю, что LinkedHashSet не позволяет дублировать элементы при вставке. Но я не понимаю, как Hashset работает в Hava? Я немного знаю, что Hashtable используется в Hashset, поэтому хеш-таблица, используемая для хранения элементов, также не позволяет дублировать элементы. Кроме того, Treeset также похож на Hashset, он также не позволяет дублировать записи, поэтому будут видны уникальные элементы в порядке возрастания.
У меня есть еще одно сомнение по поводу HashMap - Hashmap не поддерживает порядок. Он может иметь один нулевой ключ и несколько нулевых значений. Я просто не понимаю этого и что это на самом деле означает? Есть какой-нибудь практический пример для этого?
Я немного знаю, Hashmap раньше работал на основе этого - ключ и значения, используемые для помещения в ведра, также имеют уникальные номера. Таким образом, можно идентифицировать и получать ключ и значение из корзин. Когда я помещаю пару ключ / значение в корзину, идентификатор которой является хеш-кодом ключа.
Например: хэш-код ключа - 101, поэтому он хранится в сегменте 101. В одном сегменте может храниться больше, чем пары ключей и значений. Предположим, возьмем пример, поскольку Object1 - это «A», object2 - это «A», а object3 - «B», тогда у него такой же хеш-код. Таким образом, он хранит разные объекты, используя один и тот же хэш-код в одной корзине. Я сомневаюсь, что объекты с одинаковым хэш-кодом должны быть равны, а разные объекты должны иметь разные хэш-коды?
Это программа, использующая 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
Я сомневаюсь, почему «а» вставляется между «В» и «С».
Теперь я использую 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
Теперь, используя Treeset:
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?