JAVA:hashset常用方法和源码分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dian1pei2xiao3/article/details/84856394
 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());//计算存储元素的个数


    }

猜你喜欢

转载自blog.csdn.net/Dian1pei2xiao3/article/details/84856394