1. 程式人生 > >JAVA:hashset常用方法和原始碼分析

JAVA:hashset常用方法和原始碼分析

 public static void main(String [] args){
        /**hashset特點:
         * 1.繼承關係
         * public class HashSet<E>
         *     extends AbstractSet<E>
         *     implements Set<E>, Cloneable, java.io.Serializable
         * 2.構造器
         * 無參構造器呼叫hashmap構造器
         *  public HashSet() {
         *         map = new HashMap<>();
         *     }
         * 其中map 的資料型別為hashmap,value值為object
         * private transient HashMap<E,Object> map;
         */
        HashSet<String> hashSet=new HashSet<String>();
        /**hashset插入元素本質是對hashmap插入鍵值對,其中的value值為object
         * 因此hashset插入的值為key,則hashset的特點為:
         * 1.不能重複
         * 2.只能有一個null值
         */

        hashSet.add("zs");//增加元素
        hashSet.add("ls");
        hashSet.add("zy");
        /**原始碼分析:
         * 底層呼叫hashmap的put方法
         *  public boolean add(E e) {
         *         return map.put(e, PRESENT)==null;
         *     }
         * private static final Object PRESENT = new Object();
         *
         */
        hashSet.remove("zy");//刪除元素
        /**
         * 底層呼叫hashmap的remove方法
         *
         *  public boolean remove(Object o) {
         *         return map.remove(o)==PRESENT;
         *     }
         */
        //遍歷方式
        System.out.println("增強for迴圈");
        for (String str:hashSet) {
            System.out.println(str);

        }
        //迭代器遍歷
        System.out.println("迭代器遍歷");
        Iterator<String> iterator = hashSet.iterator();
        while (iterator.hasNext()){
            String next = iterator.next();
            System.out.println(next);
        }
        /*
        原始碼分析:
         public Iterator<E> iterator() {
        return map.keySet().iterator();
        }
        底層呼叫hashmap的對key值得遍歷方法
         */
      System.out.println( hashSet.size());//計算儲存元素的個數


    }