• Java集合之TreeSet


    总结

    1. TreeSet 是 SortedSet 接口的实现类,TreeSet 可以确保集合元素处于排序状态。
    2. TreeSet 支持两种排序方法:自然排序和定制排序。默认情况下,TreeSet 采用自然排序。

    自然排序

    排序:TreeSet 会调用集合元素的 compareTo(Object obj) 方法来比较元素之间的大小关系,然后将集合元素按升序排列
    如果 this > obj,返回正数 1
    如果 this < obj,返回负数 -1
    如果 this = obj,返回 0 ,则认为这两个对象相等
    必须放入同样类的对象.(默认会进行排序) 否则可能会发生类型转换异常.我们可以使用泛型来进行限制

    import java.util.Comparator;
    import java.util.Iterator;
    import java.util.Set;
    import java.util.TreeSet;
    
    public class Test {
    	public static void main(String[] args) {
    		Set<Integer> set = new TreeSet<Integer>();
    		//添加元素
    		set.add(10);
    		set.add(4);
    		set.add(99);
    		set.add(66);
    		//移除元素
    		set.remove(1);
    		//是否包含某种元素
    		set.contains(99);
    		//TreeSet自然排序
    		System.out.println(set);
    		
    		//使用迭代器遍历集合
    		Iterator<Integer> st = set.iterator();
    		while(st.hasNext()) {
    			System.out.println(st.next());
    		}
    		//使用for each迭代集合
    		for(Integer i :set) {
    			System.out.println(i);
    		}
    }
    

    定制排序

    如果需要实现定制排序,则需要在创建 TreeSet 集合对象时,提供一个 Comparator 接口的实现类对象。由该 Comparator 对象负责集合元素的排序逻辑

    import java.util.Comparator;
    import java.util.Iterator;
    import java.util.Set;
    import java.util.TreeSet;
    
    public class Test {
    	public static void main(String[] args) {	
    		/**
    		 * 定制排序
    		 * 如果需要实现定制排序,则需要在创建 TreeSet 集合对象时,
    		 * 提供一个 Comparator 接口的实现类对象。
    		 * 由该 Comparator 对象负责集合元素的排序逻辑
    		 */
    		Person p5 = new Person(111,"李四");
    		Person p1 = new Person(13,"张三");
    		Person p2 = new Person(9,"王二");
    		Person p3 = new Person(101,"李逵");
    		Person p4 = new Person(111,"李某人");
    		//创建一个person对象的泛型集合
    		Set<Person> p = new TreeSet<Person>(new Person());
    		//将对象加入集合
    		p.add(p1);
    		p.add(p2);
    		p.add(p3);
    		p.add(p4);
    		p.add(p5);
    		//for each遍历集合
    		for(Person set1:p) {
    			System.out.println(set1.age+"    "+set1.name);
    		}
    		
    	}
    }
    //实现Comparator接口
    class Person implements Comparator<Person>{
    	int age;
    	String name;
    	//定义一个无参构造和有参构造
    	Person() {}
    	Person(int age,String name){
    		this.name = name;
    		this.age = age;
    	}
    //重写compare方法,自定义排序方式
    	@Override
    	public int compare(Person o1, Person o2) {
    		if(o1.age>o2.age) {
    			return 1;
    		}else if(o1.age<o2.age) {
    			return -1;
    		}
    		return 0;
    	}}
    
    
  • 相关阅读:
    Go笔记
    EFCore CodeFirst操作MySQL
    基于NET Core简单操作Kafka
    NETCore2.2/3.0+使用带有权限验证的Swagger
    Net操作RabbitMQ
    Mysql报错问题汇总
    GDSM自动化部署shell脚本
    NET操作Redis
    ViewState原理
    使用jsonp跨域请求
  • 原文地址:https://www.cnblogs.com/istart/p/12013648.html
Copyright © 2020-2023  润新知