Java重修笔记 第四十八天 TreeSet 类、TreeMap 类
-
TreeSet 类
1. TreeSet 底层是 TreeMap
2. 使用默认构造器创建的 TreeSet 对象,添加顺序和取出顺序不是有序的
3. 如果添加的是字符串或数字,它们默认会按照字母顺序或数值顺序进行排序
4. 可以在构造器中传入一个 Comparator 比较器来手动制定比较规则,之后传入的数据会根据改规则自动进行比较排序,如果根据比较器比较出的结果是相同的,即 compare() 方法返回0的话,判定相同的元素则不会添加到 TreeSet 中,这点尤为重要!
public class TreeSet01 {
@SuppressWarnings("all")
public static void main(String[] args) {
TreeSet treeSet = new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
String s1 = (String) o1;
String s2 = (String) o2;
return s1.compareTo(s2);
}
});
treeSet.add("jack");
treeSet.add("tom");
treeSet.add("sp");
treeSet.add("bbb");
treeSet.add("ccc");
treeSet.add("a");
treeSet.add("sp");
System.out.println("treeSet = " + treeSet);
}
}
运行结果:
3. TreeSet 类实现了 Set 接口,所以有着 Set 接口的特性,例如添加的值不可重复
-
TreeMap 类
1. 经过比较器比较,相同的 key 添加进去,会把旧的 value 替换为新的 value
2. Key 和 Value 以 Entry 结点的方式存储在 TreeMap 中
3. 如果添加的是字符串或数字,它们默认会按照字母顺序或数值顺序进行排序
public class TreeMap01 {
@SuppressWarnings("all")
public static void main(String[] args) {
TreeMap treeMap = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return ((String) o1).length() - ((String) o2).length();
}
});
treeMap.put("Jack", "杰克");
treeMap.put("Tom", "汤姆");
treeMap.put("Smith", "史密斯");
treeMap.put("Super_Minion", "超级兵");
treeMap.put("Alice", "替换"); // 替换
System.out.println(treeMap);
}
}
运行结果: