TreeSet与TreeMap

TreeSet说明

treeSet可以进行排序,我们如果不进行处理,则排序是乱的

  • 排序

image-20220312161951888

可以看到Tree拥有很多的构造器

image-20220312162057921

使用TreeSet提供的一个构造器,并且传入一个匿名内部类,并指定排序规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.*;

public class Test {
public static void main(String[] args) {
TreeSet treeSet=new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return ( (String)o2).compareTo((String)o1);
}
});
treeSet.add("as");
treeSet.add("ds");
treeSet.add("cs");
treeSet.add("es");
treeSet.add("jack");
treeSet.add("array");
System.out.println(treeSet);

}
}

image-20220312162903875

我们debug运行一下,可以看到构造器中其底层其实调用了treemap的构造器方法

image-20220312163645971

而接下来,我们运行的treeset的put方法

image-20220312163849513

动态绑定到我们的cpmpare啊方法中执行我们的方法

image-20220312163916727

TreeMap说明

其比较的方法与上述相同

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.*;

public class Test {
public static void main(String[] args) {
TreeMap treeMap=new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return ( (String)o2).compareTo((String)o1);
}
});
treeMap.put("as","haha");
treeMap.put("bs","haha");
treeMap.put("ij","haha");
treeMap.put("arr","haha");
treeMap.put("bt","haha");
System.out.println(treeMap);

}
}

image-20220312164405976

下面我们进行根据字符串的大小进行比较,因为这个TreeMap返回的compare当长度相等为0,进行舍弃,顾可以发现bt并没有打出来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.*;

public class Test {
public static void main(String[] args) {
TreeMap treeMap=new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return ( ((String)o2).length())-(((String)o1).length());
}
});
treeMap.put("as","haha");
treeMap.put("bsfgn","haha");
treeMap.put("ijgf","haha");
treeMap.put("arr","haha");
treeMap.put("bt","haha");
System.out.println(treeMap);

}
}

image-20220312165111731