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)

      

  • 相关阅读:
    视图中使用select a.* 更改了表a的结构 导致读取字段值时发生错位
    sql 压缩文件(rar或zip)
    单击触发jquery.autocomplete的两种方法
    CSS布局时容易出的小错误,导致浏览器不兼容或者各种不显示
    使用备份数据库.bal文件还原正在使用的数据库
    sql outer join
    利用GBK双字节编码突破PHP单引号转义限制进行SQL注入:set names gbk导致的sql注入
    对可操作对象的占用状态、锁定状态、解锁状态的一些方案
    回车转换成Tab
    DataGrid超级连接列
  • 原文地址:https://www.cnblogs.com/lonske/p/8883765.html
Copyright © 2011-2022 走看看