常用集合※【HashSet】

来源:互联网 发布:正装ps软件 编辑:程序博客网 时间:2024/06/16 20:04

 HashSet类实现Set接口,由哈希表支持,但是HashSet是基于HashMap实现的,它的底层封装

了一个HashMap,来保存数据。

HashSet结构

public class HashSet<E>   extends AbstractSet<E>      implements Set<E>, Cloneable, Serializable

 HashSet继承了AbstractSet类,并实现了Set接口。即:AbstractSet提供 Set接口的骨干实现,从而最大限度地减少了实现此接口所需的工作。Set接口是一种不包括重复元素的Collection,它维持它自己的内部排序,所以随机访问没有任何意义。

HashSet实现了Coneable接口,即:具有克隆功能。

HashSet实现了Serializable接口,即:这意味着HashSet支持序列化,能通过序列化去传输。

 

私有属性

 

基于Hashmap实现,底层采用hashMap保存 private transient HashMap<E,Object> map;定义一个object对象,用来当做hashMap的value值。private static finalObject PRESENT = new Object();


HashSet构造函数


 public HashSet() {map = new HashMap<E,Object>();    }  public HashSet(Collection<? extends E> c) {map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16));addAll(c);    } public HashSet(int initialCapacity, float loadFactor) {map = new HashMap<E,Object>(initialCapacity, loadFactor);    }   public HashSet(int initialCapacity) {map = new HashMap<E,Object>(initialCapacity);    }


总结

  1. 不能保证元素的排列顺序。
  2. HashSet不是同步的,多线程访问同一步HashSet对象时,需要手工同步。
  3. 集合元素值可以是null。
  4. HashSet不能重复存储equals相同的数据 。原因就是equals相同,数据的散列码也就相同(hashCode必须和equals兼容)



1 0
原创粉丝点击