zoukankan      html  css  js  c++  java
  • Java容器(TreeSet)

    TreeSet

    TreeSet是SortedTree的实现类,所以TreeSet里面的元素需要排序,排序方法分为自然排序指定排序

    • TreeSet 继承于AbstractSet,所以它是一个Set集合,具有Set的属性和方法。
    • TreeSet 实现了NavigableSet接口,意味着它支持一系列的导航方法。比如查找与指定目标最匹配项。
    • TreeSet 实现了Cloneable接口,意味着它能被克隆。
    • TreeSet 实现了java.io.Serializable接口,意味着它支持序列化。
    • TreeSet是基于TreeMap实现的。TreeSet中的元素支持2种排序方式:自然排序 或者 根据创建TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法。

    TreeSet例子

    自然排序
    自定义类对象,继承Comparable接口,实现接口里面的compareTo(Object o)的方法,比较两个类对象,前者大返回1,后者大返回负整数,相等返回0。

    自定义Person类,继承Comparable接口

    package com.cwstd.day3;
    import java.text.Collator;
    import java.util.Comparator;
    import java.util.Locale;
    import java.util.Objects;
    import java.util.stream.Collector;
    //继承Comparable接口
    public class Person implements Comparable {
        private String name;
        private Integer age;
        public Person(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
    //实现继承Comparable的compareTo方法
        @Override
        public int compareTo(Object o) {
        Person person=null;
        if(o instanceof Person)
        {
            person=(Person) o;
            Comparator comparator =Collator.getInstance(Locale.CHINA);
            int res=comparator.compare(this.name,person.getName());
            if(res==0)
            {
                res=this.age>person.getAge()?1:(this.age==person.getAge()?0:-1);
    
            }
            return res;
        }
            return 0;
        }
    }
    

    测试类

    package com.cwstd.day3;
    
    import org.junit.Test;
    
    import java.util.TreeSet;
    
    public class TreeSetTest {
        @Test
        public void add()
        {
            TreeSet<Person> treeSet = new TreeSet<>();
            treeSet.add(new Person("从西",12));
            treeSet.add(new Person("啊伟",12));
            for(Person p:treeSet)
            {
                System.out.println(p.getName());
                System.out.println(p.getAge());
            }
        }
    }
    
    

    注意:TreeSet类使用比较类来判断是否相等,并不需要HashSet的hashCode()和equals()方法来判断是否相等。(自定义类时候三个方法最好都加上)


    指定排序
    指定排序是使用三方接口Comparator,不是为TreeSet专门设计的,当指定排序与自然排序同时出现时,生效的是指定排序

    定义指定排序类PersonComparator

    package com.cwstd.day3;
    
    import java.text.Collator;
    import java.util.Comparator;
    import java.util.Locale;
    
    public class PersonComparator implements Comparator {
        @Override
        public int compare(Object o1, Object o2) {
            Person person1=null;
            Person person2=null;
            if(o1 instanceof Person && o2 instanceof Person)
            {
                person1=(Person) o1;
                person2=(Person) o2;
                Comparator comparator = Collator.getInstance(Locale.CHINA);
                int res=comparator.compare(person1.getName(),person2.getName());
                if(res==0)
                {
                    res=person1.getAge()>person2.getAge()?1:(person1.getAge()==person2.getAge()?0:-1);
                }
                return res;
    
            }
            return 0;
        }
    }
    

    测试类

    package com.cwstd.day3;
    
    import org.junit.Test;
    
    import java.util.TreeSet;
    
    public class TreeSetTest {
        @Test
        public void add()
        {
            TreeSet<Person> treeSet1 = new TreeSet<>(new PersonComparator());//传入比较类
            treeSet1.add(new Person("从西",12));
            treeSet1.add(new Person("啊伟",12));
            for(Person p:treeSet1)
            {
                System.out.println(p.getName());
                System.out.println(p.getAge());
            }
        }
    }
    
    
  • 相关阅读:
    2020.08.28【周报】
    区间合并【排序、栈】
    1042 数字0-9的数量【解题数分DP】
    asp.net数据分页方法
    纯css面板插件,自适应,多样式
    c#winform图表控件使用示例
    使用妹子UI开发的体验分享
    阿里云储存代码整理(由三卷天书整理)
    测试程序的时候用到写参数或者错误日志的几个方法,用来方便发现错误
    fineUI表格控件各属性说明
  • 原文地址:https://www.cnblogs.com/cwstd/p/14710500.html
Copyright © 2011-2022 走看看