集合里的TreeSet和MapSet

本文详细介绍了Java中TreeSet和TreeMap的数据结构特点及使用方法。TreeSet能够确保存储的元素唯一且有序,通过实现Comparable接口或提供Comparator实现自定义排序。TreeMap则为键值对提供了基于红黑树的排序机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值