集合里的TreeSet和MapSet

  • Post author:
  • Post category:其他


1.TreeSet

TreeSet: 可对里边的元素实现自然排序: (从小到大,或者从大到小)



里边的元素不能重复:依赖的是compareTo/compare


认为结果是0的两个元素是一个元素,所以存的时候 就会少一个元素通常我们在写compareTo/compare方法的时候,尽量不要只比较一个属性(这里和set集合不同,Set集合是依赖hashcode和equals两个方法来确定元素不重复)




有序的:



List: 可以使用索引操作元素



LinkedHashSet/LinkedHashMap: 可以保证存入和取出的顺序



TreeSet/TreeMap:  里边的元素可按大小进行排序

要求里面的元素必须实现Comparable接口,默认按照改接口的实现的排序规则进行排序,如果不想实现该接口,或者对这里的排序方式不满意,可以在创建TreeSet对象的时候传进去一个Comparator,实现新的排序方式。


import java.util.Comparator;

import java.util.TreeSet;


public class TreeSetDemo {




public static void main(String[] args) {




TreeSet<Integer> treeSet = new TreeSet<>();



treeSet.add(100);



treeSet.add(10);



treeSet.add(40);



treeSet.add(40);



treeSet.add(50);



System.out.println(treeSet);//升序



//无参构造方法的TreeSet中的元素必须要实现Comparable接口



TreeSet<Person> ps = new TreeSet<>();



ps.add(new Person(“Lucy”,12));//运行时报错:java.lang.ClassCastException: ,由于没有实现Comparable接口



ps.add(new Person(“Jack”,100));



ps.add(new Person(“Rose”,60));



ps.add(new Person(“TOM”,17));



ps.add(new Person(“JOM”,17));



ps.add(new Person(“Jerry”,27));



System.out.println(ps);






//Comparator,传入一个Comparator,TreeSet可按此方式进行排序



TreeSet<Integer> set1 = new TreeSet<>(new Comparator<Integer>(){




@Override



public int compare(Integer o1, Integer o2) {




return o2-o1;



}



});




set1.add(100);



set1.add(10);



set1.add(40);



set1.add(50);



System.out.println(set1);//



}


}


class Person implements Comparable<Person>{




String name;



int age;



public Person(String name, int age) {




super();



this.name = name;



this.age = age;



}



@Override



public String toString() {




return “Person [name=” + name + “, age=” + age + “]”;



}



@Override




public int compareTo(Person o) {




return this.age – o.age;



}



}


2.TreeMap


import java.util.Comparator;

import java.util.Map;

import java.util.TreeMap;

/**

* TreeMap: 可以对元素中的key做自然排序

*


key不能重复: compareTo/compare

*/

public class TreeMapDemo {




public static void main(String[] args) {




Map<Integer,String> map =  new TreeMap<>();



map.put(120, “34”);



map.put(150, “344”);



map.put(110, “3476”);



map.put(90, “347”);



System.out.println(map);



Map<Integer,String> map1 = new TreeMap<Integer, String>(new Comparator<Integer>() {




@Override



public int compare(Integer o1, Integer o2) {




return o2-o1;



}



});



map1.put(120, “34”);



map1.put(150, “344”);



map1.put(110, “3476”);



map1.put(90, “347”);



System.out.println(map1);



TreeMap<Person,Integer> map3 = new TreeMap<>();



map3.put(new Person(“Lucy”,12), 1);



map3.put(new Person(“Lily”,5), 2);



map3.put(new Person(“Poly”,9), 3);



System.out.println(map3);



}

}