set实现原理
set的实现是基于map的。其实Set利用的就是Map中“键”不能重复的特性来实现的。 HashSet的巧妙实现:就是建立一个“键值对”,“键”就是我们要存入的对象,“值”则是一个常量。这样可以确保, 我们所需要的存储的信息之是“键”。而“键”在Map中是不能重复的,这就保证了我们存入Set中的所有的元素都不重复。而判断是否添加元素成功,则是通 过判断我们向Map中存入的“键值对”是否已经存在,如果存在的话,那么返回值肯定是常量:PRESENT ,表示添加失败。如果不存在,返回值就为null 表示添加成功。
特点
*set的特点在于set中的元素不能重复,因此可以用来去除重复的元素
set常见操作
-
public int size() :返回set中元素的数目,如果set包含的元素数大于Integer.MAX_VALUE,返回Integer.MAX_VALUE;
-
public boolean isEmpty() :如果set中不含元素,返回true ;
-
public boolean contains(Object o) :如果set包含指定元素,返回true ;
-
public Iterator iterator() : 返回set中元素的迭代器,元素返回没有特定的顺序,除非set提高该保证的某些类的实例 ;
-
public boolean add(Object o) :如果set中不存在指定元素,则向set加入 ;
-
public boolean addAll(Collection c) :过滤集合中的重复元素,向set加入 【将c中所有元素添加到Set中,如果Set中已有某一元素,则不添加,因Set不允许有重复值】;
-
public boolean remove(Object o) :如果set中存在指定元素,则从set中删除 ;
-
public boolean removeAll(Collection c) :如果set包含指定集合,则从set中删除指定集合的所有元素 ;
-
public void clear() :从set中删除所有元素;
几种不同的set实现方式
HashSet
特点
- 存放进去的顺序和储存顺序无关
- HashSet类按照哈希算法来存取集合中的对象,存取速度比较快允许包含值为null的元素,但最多只能有一个null元素;
LinkedHashSet
特点
- 保持元素的添加顺序
TreeSet
特点
- 对set进行排列
网友评论