(3)LinkedHashSet
HashSet有一个子类LinkedHashSet,LinkedHashSet集合同HashSet一样,也是根据元素的hashCode值来确定元素的存储位置,并且通过链表维护元素的顺序,换句话说,遍历LinkedHashSet时,LinkedHashSet将会按照元素的添加顺序来访问集合里的元素。
如果在某些场景下要使用set容器保存元素,并且需要维护set中的存放元素的顺序,那么就可以使用LinkedHashSet
public class Test3 {
public static void main(String[] args) {
LinkedHashSet<String> set = new LinkedHashSet<>();
set.add("贞观之治");
set.add("开元盛世");
set.add("文景之治");
//添加进容器的元素和取出的元素顺序是一致的。
set.forEach(e-> System.out.println(e));
}
}
(4)TreeMap
TreeMap 就是一个红黑树数据结构,每个 key-value 对即作为红黑树的一个节点。TreeMap 存储 key-value 对(节点)时,需要根据 key 对节点进行排序。
public class TreeMapDemo {
public static void main(String[] args) {
TreeMap<Integer,String> map = new TreeMap<Integer,String>();
map.put(1,"苏轼");
map.put(2,"李白");
map.put(3,"杜甫");
map.put(4,"岑参");
//返回该 Map 中最小 key 所对应的 key-value 对,如果该Map为空,则返回 null。
System.out.println(map.firstEntry());
//返回该 Map 中的最小 key值,如果该 Map为空,则返回 null。> Map.Entry lastEntry()∶ 返回该 Map 中最大 key 所对应的 key-value 对,如果该 Map为空或不存在这样的 key-value 对,则都返回 null。
System.out.println(map.firstKey());
//返回该 Map 中的最大 key 值,如果该 Map 为空或不存在这样的 key,则都返回nulI。
System.out.println(map.lastKey());
//返回该 Map 中位于key 后一位的 key 值(即大于指定 key 的最小key 值)。如果该 Map 为空或不存在这样的 key-value 对,则都返回 nul 。
System.out.println(map.higherKey(2));
//返回该 Map 中位于key 后一位的 key-value 对(即大于指定key 的最小 key 所对应的 key-value 对)。如果该 Map 为空,则返回 null。
System.out.println(map.higherEntry(2));
//返回该Map 中位于key前一位的 key 值(即小于指定 key 的最大key 值)。如果该 Map 为空或不存在这样的 key,则都返回 null。
System.out.println(map.lowerKey(3));
//返回该 Map 中位于key 前一位的 key-value 对(即小于指定key 的最大 key 所对应的 key-value 对)。如果该 Map 为空或不存在这样的 key-value 对,则都返回 null。
System.out.println(map.lowerEntry(3));
}
}
(5)TreeSet
TreeSet 是 SortedSet 接口的实现类,TreeSet 可以确保集合元素处干排序状态。
/**
* //凡是要在TreeSet中添加的元素必须要继承Comparable接口,并重写compareTo方法
* //a.compareTo(b) >0 a>b
* //a.compareTo(b) ==0 a=b
* //a.compareTo(c) <0 a<b
* //TreeSet中判断两个对象是否相等依赖于Comparable接口的compareTo方法,不依赖于equals方法。
*/
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<Student> treeSet = new TreeSet<>();
Student s1 = new Student("小明",18);
Student s2 = new Student("小红",18);
//添加成功
treeSet.add(s1);
//添加失败,因为通过compareTo方法判断出两个对象相等
treeSet.add(s2);
treeSet.forEach(student -> System.out.println(student));
}
}
常用API
public class TreeSetDemo1 {
public static void main(String[] args) {
TreeSet<Integer> treeSet = new TreeSet<Integer>();
treeSet.add(11);
treeSet.add(12);
treeSet.add(12);
treeSet.add(13);
treeSet.add(31);
System.out.println(treeSet.comparator());
//返回集合中的第一个元素。
System.out.println(treeSet.first());
//返回集合中的最后一个元素。
System.out.println(treeSet.last());
//返回集合中位于指定元素之前的元素
System.out.println(treeSet.lower(12));
//返回集合中位于指定元素之后的元素
System.out.println(treeSet.higher(12));
//返回此Set 的子集合,范围从fromElement(包含)到 toElement (不包含)。
System.out.println(treeSet.subSet(11,13));
//返回此 Set 的子集,由小于 toElement 的元素组成
System.out.println(treeSet.headSet(32));
//返回此 Set 的子集,由大于或等于 fromElement 的元素组成。
System.out.println(treeSet.tailSet(11));
}
}