zoukankan      html  css  js  c++  java
  • 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)

      

  • 相关阅读:
    用户态和内核态
    Spring Cloud构建微服务架构:服务网关(路由配置)【Dalston版】
    为什么说分布式事务不再适用于微服务架构
    基于selenium的二次开发
    Python常用方法
    深入浅出runloader
    python socket
    python API接口测试框架
    python装饰器
    python多进程安全
  • 原文地址:https://www.cnblogs.com/lonske/p/8883765.html
Copyright © 2011-2022 走看看