TreeSet

/*
*作者:呆萌老师
*☑csdn认证讲师
*☑51cto高级讲师
*☑腾讯课堂认证讲师
*☑网易云课堂认证讲师
*☑华为开发者学堂认证讲师
*☑爱奇艺千人名师计划成员
*在这里给大家分享技术、知识和生活
*各种干货,记得关注哦!
*vx:it_daimeng
*/

1、简介

        TreeSet类扩展了 AbstractSet和implements NavigableSet接口。它与 HashSet 类非常相似,不同之处在于它按排序顺序存储元素。其底层实现为红黑树。

2、结构

3、特性

        它扩展AbstractSet了扩展类的AbstractCollection类。

        它实现NavigableSet了扩展接口的SortedSet接口。

        不允许重复值。

        不允许null值。

        有序集合。

        不允许插入异构对象。

        非线程安全。

4、案例

 //自动排序
        TreeSet<Integer> treeSet=new TreeSet<Integer>();
        
        treeSet.add(20);
        
        treeSet.add(18);
        
        treeSet.add(17);
        
        treeSet.add(21);
        
        System.out.println(treeSet);
        
       
       TreeSet<String> treeSet2=new TreeSet<String>();
        
        treeSet2.add("a");
        
        treeSet2.add("c");
        
        treeSet2.add("b");
        
        treeSet2.add("ab");
        
        System.out.println(treeSet2);

 

TreeSet<Person> treeSet=new TreeSet<Person>();
		
		//按照年龄排序(自定义排序的规则)
		
		treeSet.add(new Person("aa", 20));
		treeSet.add(new Person("bb", 18));
		treeSet.add(new Person("cc", 17));
		treeSet.add(new Person("dd", 21));
		
		System.out.println(treeSet);	
 TreeSet<Integer> treeSet=new TreeSet<Integer>();
	     
	     treeSet.add(20);
	     
	     treeSet.add(18);	     
	     
	     treeSet.add(30);
	     
	     treeSet.add(25);
	     
	     System.out.println(treeSet);
	     
	     System.out.println(treeSet.first()); //返回第一个(最小)
	     
	     System.out.println(treeSet.last()); //返回最后一个(最大);
	     
	     System.out.println(treeSet.floor(24));// <=指定元素的最大的元素
	     
	     System.out.println(treeSet.lower(25)); // <指定元素的最大的元素
	     
	     System.out.println(treeSet.ceiling(25));// >=指定元素的最小的元素
	     
	     System.out.println(treeSet.higher(18)); // >指定元素的最小的元素
	     
	     System.out.println(treeSet.pollFirst()); //获得第一个元素 并且将其从集合中删除
	     
	     System.out.println(treeSet);
	     
	     System.out.println(treeSet.pollLast()); //获得最后一个元素 并且将其从集合中删除	     
	     	
	     treeSet.add(21);
	     
	     treeSet.add(24);
	     
	     System.out.println(treeSet);
	     
	     //返回的是>=20&& <24的所有集合元素
	     SortedSet<Integer> set= treeSet.subSet(20, 24);
	     
	     for(Integer integer:set)
	    	 System.out.println(integer);
	     
	     //返回的是>=21的所有集合元素
	     SortedSet<Integer> set2= treeSet.tailSet(21);
	     
	     for(Integer integer:set2)
	    	 System.out.println(integer);
	     
	     
	     System.out.println(treeSet);
		
		

09-18
### TreeSet使用 TreeSetJava 集合框架中的一部分,实现了 `SortedSet` 接口,可用于存储有序的元素集合。以下是 TreeSet 的基本使用示例: ```java import java.util.TreeSet; public class TreeSetExample { public static void main(String[] args) { TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(3); numbers.add(1); numbers.add(2); for (Integer num : numbers) { System.out.println(num); } } } ``` 上述代码创建了一个存储整数的 TreeSet,并添加了几个元素,最后遍历输出元素。由于 TreeSet 是有序的,输出结果会按元素值从小到大排列。 ### TreeSet的特性 TreeSet 具有以下特性: - **有序性**:TreeSet 会根据元素的实际值的大小行排序,而不是根据插入顺序排序。其底层通过 TreeMap 实现,使得元素能保持自然顺序或指定的比较顺序[^1]。 - **唯一性**:TreeSet 不允许存储重复元素,添加重复元素时会被忽略。 - **不允许存储 `null` 元素**:因为 TreeSet 需要对元素行比较排序,`null` 无法参与比较。 ### TreeSet与 `computeIfAbsent` 可能的关联 `computeIfAbsent` 是 `Map` 接口中的方法,而 TreeSet 本身不是 `Map`,但可以结合使用。例如,当需要为每个键关联一个 TreeSet 时,可以使用 `computeIfAbsent` 来确保每个键对应的 TreeSet 只在需要时创建。示例代码如下: ```java import java.util.HashMap; import java.util.Map; import java.util.TreeSet; public class TreeSetComputeIfAbsentExample { public static void main(String[] args) { Map<String, TreeSet<Integer>> map = new HashMap<>(); String key = "group1"; map.computeIfAbsent(key, k -> new TreeSet<>()).add(1); map.computeIfAbsent(key, k -> new TreeSet<>()).add(3); map.computeIfAbsent(key, k -> new TreeSet<>()).add(2); System.out.println(map.get(key)); } } ``` 上述代码中,使用 `computeIfAbsent` 为键 `"group1"` 关联一个 TreeSet,如果该键对应的 TreeSet 不存在则创建一个新的 TreeSet,然后向其中添加元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值