ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java集合之TreeSet

2019-12-09 21:56:09  阅读:264  来源: 互联网

标签:set Java Person add 集合 排序 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;
    }}

标签:set,Java,Person,add,集合,排序,TreeSet
来源: https://www.cnblogs.com/istart/p/12013648.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有