• 69期-Java SE-016_集合-2-001-002


    ### Set集合
    
    Set是Collection的子接口,Set接口采用散列的存储方式,所有元素是无序的,可以存储一组无序且唯一的对象。
    
    实际开发中不能直接实例化Set对象,需要对其实现类进行实例化同时完成相关业务操作,Set常用的实现类HashSet、LinkedHashSet、TreeSet。
    
    #### HashSet
    
    存储一组无序且唯一的对象,这里的无序是指元素的存储顺序和遍历顺序不一致。
    
    ```java
    import java.util.HashSet;
    import java.util.Iterator;
    
    public class Test {
        public static void main(String[] args) {
            HashSet hashSet = new HashSet();
            hashSet.add("Hello");
            System.out.println(hashSet.size());
            hashSet.add("World");
            System.out.println(hashSet.size());
            hashSet.add("Java");
            System.out.println(hashSet.size());
            hashSet.add("Hello");
            System.out.println(hashSet.size());
            Iterator iterator = hashSet.iterator();
            while(iterator.hasNext()) {
                String item = (String)iterator.next();
                System.out.println(item);
            }
            hashSet.remove("Hello");
            iterator = hashSet.iterator();
            while(iterator.hasNext()) {
                String item = (String)iterator.next();
                System.out.println(item);
            }
        }
    }
    ```
    
    #### LinkedHashSet
    
    LinkedHashSet是Set的另外一个实现类,可以存储一组有序且唯一的元素,这里的有序是指元素的存储顺序和遍历顺序一致。
    
    ```java
    import java.util.Iterator;
    import java.util.LinkedHashSet;
    
    public class Test2 {
        public static void main(String[] args) {
            LinkedHashSet linkedHashSet = new LinkedHashSet();
            linkedHashSet.add("Hello");
            linkedHashSet.add("World");
            linkedHashSet.add("Java");
            System.out.println(linkedHashSet.size());
            linkedHashSet.add("Hello");
            System.out.println(linkedHashSet.size());
            Iterator iterator = linkedHashSet.iterator();
            while(iterator.hasNext()) {
                String item = (String)iterator.next();
                System.out.println(item);
            }
            linkedHashSet.remove("World");
            iterator = linkedHashSet.iterator();
            while(iterator.hasNext()) {
                String item = (String)iterator.next();
                System.out.println(item);
            }
        }
    }
    ```
    
    程序如何判断两个对象是否相等?通过继承自Object类的equals()方法来进行判断的。
    
    LinkedHashSet 判断两个对象是否相等的原理:首先会判断两个对象的hashCode是否相等,什么是hashCode?根据一定的规则奖与对象相关的信息、如内存地址、属性值等,映射成一个数值,这个数值称为散列值,也就是该对象的hashCode。两个不同对象的hashCode可能相等,但是两个hashCode不相等的对象一定不是同一个对象。
    
    集合在判断两个对象是否相等时,会优先比较它们的hashCode,如果不相等,则认为不是同一个对象,如果相等,还不能认为两个对象是相等的,需要通过equals方法进行进一步的验证,如果equals方法返回true,则是同一个对象,否则不是同一个对象,正常添加。
    
    #### TreeSet
    
    TreeSet中保存的元素也是有序的,并且TreeSet的有序和LinkedHashSet的有序有所不同,LinkedHashSet的有序是指元素的存储顺序和遍历顺序是一致的,元素按什么顺序存进去,遍历时就按照什么顺序取出。
    
    TreeSet的有序是指集合内部会自动给所有的元素按照升序进行排列,即无论存入的元素是什么顺序,遍历时都会按照升序进行输出,TreeSet中存储的元素也是唯一的。
    
    ```java
    import java.util.Iterator;
    import java.util.TreeSet;
    
    public class Test4 {
        public static void main(String[] args) {
            TreeSet treeSet = new TreeSet();
            treeSet.add(1);
            treeSet.add(3);
            treeSet.add(6);
            treeSet.add(2);
            treeSet.add(5);
            treeSet.add(4);
            treeSet.add(1);
            Iterator iterator = treeSet.iterator();
            while(iterator.hasNext()) {
                int num = (int)iterator.next();
                System.out.println(num);
            }
            System.out.println("**************************");
            treeSet.remove(6);
            iterator = treeSet.iterator();
            while(iterator.hasNext()) {
                int num = (int)iterator.next();
                System.out.println(num);
            }
        }
    }
    ```
    
    ```java
    import java.util.Iterator;
    import java.util.TreeSet;
    
    public class Test5 {
        public static void main(String[] args) {
            TreeSet treeSet = new TreeSet();
            treeSet.add(new A(1));
            treeSet.add(new A(3));
            treeSet.add(new A(6));
            treeSet.add(new A(2));
            treeSet.add(new A(5));
            treeSet.add(new A(4));
            treeSet.add(new A(1));
            Iterator iterator = treeSet.iterator();
            while(iterator.hasNext()) {
                A a = (A)iterator.next();
                System.out.println(a);
            }
            System.out.println("*********************");
            treeSet.remove(new A(5));
            iterator = treeSet.iterator();
            while(iterator.hasNext()) {
                A a = (A)iterator.next();
                System.out.println(a);
            }
        }
    }
    
    class A implements Comparable{
        private int num;
        public A(int num) {
            this.num = num;
        }
        @Override
        public String toString() {
            return "A [num=" + num + "]";
        }
        /**
         * A.compareTo(B)
         * 返回值:
         * 1表示A大于B
         * 0表示A等于B
         * -1表示A小于B
         */
        @Override
        public int compareTo(Object o) {
            // TODO Auto-generated method stub
            A a = (A)o;
            if(this.num>a.num) {
                return 1;
            }else if(this.num == a.num) {
                return 0;
            }else {
                return -1;
            }
        }
        
    }
    ```
    
    
    
    ### Map
    
    Set、List接口都是Collection的子接口,Map接口时与Collection完全独立的另外一个体系,它们之间的区别在于Set、List、Collection只能操作单个元素,而Map可以操作一对元素,因为Map中的元素都是以key-value的键值对形式来存储的。
    
    Map接口定义时使用了泛型,并且定义了两个泛型K和V,K表示key,规定了键元素的数据类型,V表示value,规定了值元素的数据类型。
    
    常用方法:
    
    - int size()                                    获取集合长度
    - boolean isEmpty()                                                       判断集合是否为空
    - boolean containsKey(Object key)                             判断集合中是否存在某个key值
    - boolean containsValue(Object value)                      判断集合中是否存在某个value值
    - V get(Object key)                                                         获取集合中key对应的value值
    - V put(K key,V value)                                                     向集合中存入一组key-value的元素
    - V remove(Object key)                                                  删除集合中key对应的value值
    - void putAll(Map map)                                                 向集合中添加另外一个Map集合
    - void clear()                                                                    清空集合
    - Set<K> keySet()                                                            取出集合中所有的key,返回一个Set集合
    - Collection<V> values()                                                取出集合中所有的value,返回一个Collection集合
    - Set<Map,Entry<K,V>> entrySet()                               将Map对象转为Set对象
    - int hashCode()                                                              获取集合的散列值
    - boolean equals(Object o)                                           判断两个集合是否相等
    
    ### Map接口的实现类
    
    - HashMap:存储一组无序、key不可重复,但value可重复的元素。
    - Hashtable:存储一组无序、key不可重复、但value可重复的元素。
    - TreeMap:存储一组有序、key不可重复、但value可重复的元素,可以按照key值进行排序。
    
    HashMap的使用
    
    ```java
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    public class Test6 {
        public static void main(String[] args) {
            HashMap<String,String> hashMap = new HashMap();
            hashMap.put("h", "Hello");
            hashMap.put("w","World");
            hashMap.put("j","Java");
            hashMap.put("s", "JavaSE");
            hashMap.put("m", "JavaME");
            hashMap.put("e", "JavaEE");
            System.out.println(hashMap);
            hashMap.remove("e");
            System.out.println(hashMap);
            hashMap.put("m", "Model");
            System.out.println(hashMap);
            hashMap.put("m2", "Model");
            System.out.println(hashMap);
            if(hashMap.containsKey("a")) {
                System.out.println("集合中存在值为a的key");
            }else {
                System.out.println("集合中不存在值为a的key");
            }
            if(hashMap.containsValue("Java")) {
                System.out.println("集合中存在值为Java的value");
            }else {
                System.out.println("集合中不存在值为Java的value");
            }
            Set keys = hashMap.keySet();
            Iterator iterator = keys.iterator();
            while(iterator.hasNext()) {
                String key = (String)iterator.next();
                System.out.println(key);
            }
            System.out.println("******************************");
            Collection<String> values = hashMap.values();
            Iterator iter = values.iterator();
            while(iter.hasNext()) {
                String value = (String) iter.next();
                System.out.println(value);
            }
            System.out.println("*********************************");
            Set keys2 = hashMap.keySet();
            Iterator iter2 = keys2.iterator();
            while(iter2.hasNext()) {
                String key = (String) iter2.next();
                String value = hashMap.get(key);
                System.out.println(key+"---"+value);
            }
        }
    }
    ```
    
    Hashtable的使用与HashMap基本一致,Hashtable是早期的实现类,与HashMap的区别是Hashtable是线程安全的,但是性能较低,HashMap是非线程安全,但是性能较高,从实际开发角度讲,HashMap的使用频率更高。
    
    ```java
    import java.util.Collection;
    import java.util.Hashtable;
    import java.util.Iterator;
    import java.util.Set;
    
    public class Test7 {
        public static void main(String[] args) {
            Hashtable<String,String> hashtable = new Hashtable();
            hashtable.put("h", "hello");
            hashtable.put("w", "world");
            hashtable.put("j", "Java");
            hashtable.put("s", "JavaSE");
            hashtable.put("m", "JavaME");
            hashtable.put("e", "JavaEE");
            System.out.println(hashtable);
            hashtable.remove("e");
            System.out.println(hashtable);
            hashtable.put("m", "Model");
            System.out.println(hashtable);
            System.out.println(hashtable.containsKey("a"));
            System.out.println(hashtable.containsValue("Java"));
            Collection<String> values = hashtable.values();
            Iterator iterator = values.iterator();
            while(iterator.hasNext()) {
                String value = (String)iterator.next();
                System.out.println(value);
            }
            System.out.println("*********");
            Set keys = hashtable.keySet();
            Iterator iter = keys.iterator();
            while(iter.hasNext()) {
                String key = (String)iter.next();
                String value = hashtable.get(key);
                System.out.println(key+"---"+value);
            }
        }
    }
    ```

    Test.java

    import java.util.HashSet;
    import java.util.Iterator;
    
    public class Test {
        public static void main(String[] args) {
            HashSet hashSet = new HashSet();
            hashSet.add("Hello");
            System.out.println(hashSet.size());
            hashSet.add("World");
            System.out.println(hashSet.size());
            hashSet.add("Java");
            System.out.println(hashSet.size());
            hashSet.add("Hello");
            System.out.println(hashSet.size());
            Iterator iterator = hashSet.iterator();
            while(iterator.hasNext()) {
                String item = (String)iterator.next();
                System.out.println(item);
            }
            hashSet.remove("Hello");
            iterator = hashSet.iterator();
            while(iterator.hasNext()) {
                String item = (String)iterator.next();
                System.out.println(item);
            }
        }
    }

    Test2.java

    import java.util.Iterator;
    import java.util.LinkedHashSet;
    
    public class Test2 {
        public static void main(String[] args) {
            LinkedHashSet linkedHashSet = new LinkedHashSet();
            linkedHashSet.add("Hello");
            linkedHashSet.add("World");
            linkedHashSet.add("Java");
            System.out.println(linkedHashSet.size());
            linkedHashSet.add("Hello");
            System.out.println(linkedHashSet.size());
            Iterator iterator = linkedHashSet.iterator();
            while(iterator.hasNext()) {
                String item = (String)iterator.next();
                System.out.println(item);
            }
            linkedHashSet.remove("World");
            iterator = linkedHashSet.iterator();
            while(iterator.hasNext()) {
                String item = (String)iterator.next();
                System.out.println(item);
            }
        }
    }

    Test3.java

    import java.util.Iterator;
    import java.util.LinkedHashSet;
    
    public class Test3 {
        public static void main(String[] args) {
            LinkedHashSet linkedHashSet = new LinkedHashSet();
            linkedHashSet.add(new A(1));
            linkedHashSet.add(new A(1));
            Iterator iterator = linkedHashSet.iterator();
            while(iterator.hasNext()) {
                A a = (A)iterator.next();
                System.out.println(a);
            }
        }
    }
    
    //class A{
    //    private int num;
    //    public A(int num) {
    //        this.num = num;
    //    }
    //    @Override
    //    public String toString() {
    //        return "A [num=" + num + "]";
    //    }
    //    @Override
    //    public int hashCode() {
    //        // TODO Auto-generated method stub
    //        return 1;
    //    }
    //    @Override
    //    public boolean equals(Object obj) {
    //        // TODO Auto-generated method stub
    //        return true;
    //    }
    //}

    Test4.java

    import java.util.Iterator;
    import java.util.TreeSet;
    
    public class Test4 {
        public static void main(String[] args) {
            TreeSet treeSet = new TreeSet();
            treeSet.add(1);
            treeSet.add(3);
            treeSet.add(6);
            treeSet.add(2);
            treeSet.add(5);
            treeSet.add(4);
            treeSet.add(1);
            Iterator iterator = treeSet.iterator();
            while(iterator.hasNext()) {
                int num = (int)iterator.next();
                System.out.println(num);
            }
            System.out.println("**************************");
            treeSet.remove(6);
            iterator = treeSet.iterator();
            while(iterator.hasNext()) {
                int num = (int)iterator.next();
                System.out.println(num);
            }
        }
    }

    Test5.java

    import java.util.Iterator;
    import java.util.TreeSet;
    
    public class Test5 {
        public static void main(String[] args) {
            TreeSet treeSet = new TreeSet();
            treeSet.add(new A(1));
            treeSet.add(new A(3));
            treeSet.add(new A(6));
            treeSet.add(new A(2));
            treeSet.add(new A(5));
            treeSet.add(new A(4));
            treeSet.add(new A(1));
            Iterator iterator = treeSet.iterator();
            while(iterator.hasNext()) {
                A a = (A)iterator.next();
                System.out.println(a);
            }
            System.out.println("*********************");
            treeSet.remove(new A(5));
            iterator = treeSet.iterator();
            while(iterator.hasNext()) {
                A a = (A)iterator.next();
                System.out.println(a);
            }
        }
    }
    
    class A implements Comparable{
        private int num;
        public A(int num) {
            this.num = num;
        }
        @Override
        public String toString() {
            return "A [num=" + num + "]";
        }
        /**
         * A.compareTo(B)
         * 返回值:
         * 1表示A大于B
         * 0表示A等于B
         * -1表示A小于B
         */
        @Override
        public int compareTo(Object o) {
            // TODO Auto-generated method stub
            A a = (A)o;
            if(this.num>a.num) {
                return 1;
            }else if(this.num == a.num) {
                return 0;
            }else {
                return -1;
            }
        }
        
    }

    Test6.java

    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    public class Test6 {
        public static void main(String[] args) {
            HashMap<String,String> hashMap = new HashMap();
            hashMap.put("h", "Hello");
            hashMap.put("w","World");
            hashMap.put("j","Java");
            hashMap.put("s", "JavaSE");
            hashMap.put("m", "JavaME");
            hashMap.put("e", "JavaEE");
            System.out.println(hashMap);
            hashMap.remove("e");
            System.out.println(hashMap);
            hashMap.put("m", "Model");
            System.out.println(hashMap);
            hashMap.put("m2", "Model");
            System.out.println(hashMap);
            if(hashMap.containsKey("a")) {
                System.out.println("集合中存在值为a的key");
            }else {
                System.out.println("集合中不存在值为a的key");
            }
            if(hashMap.containsValue("Java")) {
                System.out.println("集合中存在值为Java的value");
            }else {
                System.out.println("集合中不存在值为Java的value");
            }
            Set keys = hashMap.keySet();
            Iterator iterator = keys.iterator();
            while(iterator.hasNext()) {
                String key = (String)iterator.next();
                System.out.println(key);
            }
            System.out.println("******************************");
            Collection<String> values = hashMap.values();
            Iterator iter = values.iterator();
            while(iter.hasNext()) {
                String value = (String) iter.next();
                System.out.println(value);
            }
            System.out.println("*********************************");
            Set keys2 = hashMap.keySet();
            Iterator iter2 = keys2.iterator();
            while(iter2.hasNext()) {
                String key = (String) iter2.next();
                String value = hashMap.get(key);
                System.out.println(key+"---"+value);
            }
        }
    }

    Test7.java

    import java.util.Collection;
    import java.util.Hashtable;
    import java.util.Iterator;
    import java.util.Set;
    
    public class Test7 {
        public static void main(String[] args) {
            Hashtable<String,String> hashtable = new Hashtable();
            hashtable.put("h", "hello");
            hashtable.put("w", "world");
            hashtable.put("j", "Java");
            hashtable.put("s", "JavaSE");
            hashtable.put("m", "JavaME");
            hashtable.put("e", "JavaEE");
            System.out.println(hashtable);
            hashtable.remove("e");
            System.out.println(hashtable);
            hashtable.put("m", "Model");
            System.out.println(hashtable);
            System.out.println(hashtable.containsKey("a"));
            System.out.println(hashtable.containsValue("Java"));
            Collection<String> values = hashtable.values();
            Iterator iterator = values.iterator();
            while(iterator.hasNext()) {
                String value = (String)iterator.next();
                System.out.println(value);
            }
            System.out.println("*********");
            Set keys = hashtable.keySet();
            Iterator iter = keys.iterator();
            while(iter.hasNext()) {
                String key = (String)iter.next();
                String value = hashtable.get(key);
                System.out.println(key+"---"+value);
            }
        }
    }
  • 相关阅读:
    Kafka Streams演示程序
    大全Kafka Streams
    简介Kafka Streams
    初识Kafka
    面试常考各类排序算法总结.(c#)
    php程序员的成长之路
    web前端研发工程师编程能力成长之路
    CentOS 6.6编译安装Nginx1.6.2+MySQL5.6.21+PHP5.6.3
    【转】OkHttp使用进阶 译自OkHttp Github官方教程
    排序算法一:桶排序
  • 原文地址:https://www.cnblogs.com/HiJackykun/p/11172960.html
Copyright © 2020-2023  润新知