JAVA:hashset常用方法和原始碼分析
阿新 • • 發佈:2018-12-07
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());//計算儲存元素的個數 }