LinkedHashSet的简介
- LinkedHashSet是HashSet的子类
- 底层是一个LinkedHashMap,底层维护的一个数组+双向链表
- 根据元素hascode的值决定元素存储的位置,同时使用链表维护元素 的次序图,这使得元素看起来是以插入顺序保存的。双向链表的pre和next指向前一个和下一个元素,看起来有序
- LinkedHashSet不允许添加重复的元素
而LinkedHashSet的添加机制与HashSet相同
第一次添加时,直接将数组table【】扩容到16,存放的节点类型时LinkedHashSet$Entry,而如果想要将其放入到其中,则Entry应该使继承了Node的
练习
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| import java.time.LocalDate; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Objects;
public class Test { public static void main(String[] args) { LinkedHashSet linkedHashSet=new LinkedHashSet(); linkedHashSet.add(new Car("奥迪",46465)); linkedHashSet.add(new Car("奥迪",46465)); linkedHashSet.add(new Car("奥迪",46465)); System.out.println(linkedHashSet); } } class Car{ String name; double value;
public Car(String name, double value) { this.name = name; this.value = value; }
@Override public int hashCode(){ return Objects.hash(name,value); }
@Override public boolean equals(Object o){ if (o==this){ return true; } Car car=(Car) o; if (Objects.equals(car.name,name)&&car.value==value){ return true; } else {return false;} } }
|