Java自学笔记—LinkedHashSet
特点
- HashSet子类
- 底层是LinkedHashMap,底层维护了一个数组 + 双向链表,有 head 和 tail 结点
- 每个结点有before和after属性,以便形成双向链表
- 根据hashCode值确定元素存储位置,同时使用链表维护元素次序,使得元素看起来以插入顺序保
- 不允许添加重复元素
- 遍历时可以确保遍历和插入顺序一致
- 在添加元素时,先求hash值,再求索引,确定table位置,然后将该元素加到双向链表(如果已经存在,则不添加,和HashSet一样)
tail.next = newElement;
newElement.pre = tail;
tail = ewElement;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Set;
public class LinkedHashSet_ {
public static void main(String[] args) {
Set set = new LinkedHashSet();
set.add(new String("AA"));
set.add(456);
set.add(456);
set.add(new Customer("jack", 18));
set.add(123);
set.add("lspero");
System.out.println(set);
}
}
class Customer{
private String name;
private int age;
public Customer(String name, int age) {
this.name = name;
this.age = age;
}
}
常用方法
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
@SuppressWarnings("all")
public class SetMethod {
public static void main(String[] args) {
Set set = new HashSet();
set.add("jhon");
set.add("lucy");
set.add("jhon");
set.add("jack");
set.add(null);
set.add(null);
System.out.println("Set = " + set);
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Object next = iterator.next();
System.out.println(next);
}
System.out.println("=========");
for (Object o :set) {
System.out.println(o);
}
}
}