• Java_Set接口


    Set也是Collection的子接口,特点是里面保存的数据不允许重复。但Set子接口没有像List接口那样针对Collection接口进行了扩充,而是完整的按照Collection接口的标准实现了继承,所有没有get()方法.

    Set子接口中有两个常用的类:HashSet(无序列)、TreeSet(有序)。

    HashSet最大特点是不允许重复元素,并且无序排列

    import java.util.HashSet;
    import java.util.Set;
    
    public class CopyDemo {
        public static void main(String[] args) throws Exception {
            Set<String> all = new HashSet<String>();
            all.add("wang");
            all.add("li");
            all.add("zhou");
            all.add("wang");
            System.out.println(all);
        }
    }

    TreeSet已经排序了,按字母升序

    import java.util.Set;
    import java.util.TreeSet;
    
    public class CopyDemo {
        public static void main(String[] args) throws Exception {
            Set<String> all = new TreeSet<String>();
            all.add("wang");
            all.add("li");
            all.add("zhou");
            all.add("wang");
            System.out.println(all);
        }
    }

    想用TreeSet实现排序,一定要实现java.lang.Comparable接口(为了有排序依据)

    TreeSet靠compareTo()相等区分重复.而在实现Comparable接口的时候必须将所有的原属性都参与到比较过程中。

    import java.util.Set;
    import java.util.TreeSet;
    
    class Person implements Comparable<Person>{
        private int age;
        private String name;
        public Person( String name, int age) {
            this.age = age;
            this.name = name;
        }
        public String toString() {
            return "Person [age=" + age + ", name=" + name + "]
    ";
        }
        @Override
        public int compareTo(Person o) {
            if(this.age > o.age) {
                return 1;
            }else if (this.age <o.age) {
                return -1;
            }else {
                return this.name.compareTo(o.name);
            }
            
        }
    }
    
    public class CopyDemo {
        public static void main(String[] args) throws Exception {
            Set<Person> all = new TreeSet<Person>();
            all.add(new Person("wang",123));
            all.add(new Person("li",123));//年龄相同
            all.add(new Person("zhou",66)); 
            all.add(new Person("zhou",66)); //完全相同
            System.out.println(all);
        }
    }

    只要牵涉到一组对象的排序操作,永远都使用Comparable接口完成。

    关于重复元素的说明

    Comparable只适合TreeXxx类型的集合消除重复元素,而真正意义上的重复的判断并不是利用Comparable接口完成的,而是利用Object类中两个方法完成的。

      取得对象的Hash码:public int hashCode();

      对象比较:public boolean equals(Object obj)

      

  • 相关阅读:
    Run Book Automation
    Android.mk中的经常使用语法
    层的匀速运动波动处理
    【ArcGIS 10.2新特性】ArcGIS 10.2 for Server常见问题
    WPF-19:分享一个样式(左右滑动选中的checbox)
    [置顶] 程序员期望月薪那些事儿
    【VB/.NET】Converting VB6 to VB.NET 【Part II】【之四】
    两种方式给列表增加自动增长序号列
    在后台运行erlang;在需要时连回交互模式
    php设计模式——UML类图
  • 原文地址:https://www.cnblogs.com/lonske/p/8883765.html
Copyright © 2020-2023  润新知