Java Collections Framework(4) Set

来源:互联网 发布:iphone屏幕检测软件 编辑:程序博客网 时间:2024/05/29 15:36


1. A set is a collection that contains no duplicate elements. More formally, sets contain no pair of elements e1 and e2 such that e1.equals(e2) , and at most one null elements.

2. Some Set implementations have restrictions on the elements that they may contain. For example, some implementations prohibit null elements, and some have restrictions on the types of their elements.
   Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false。
   Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,只要两个对象用equals方法比较返回true,Set就不 会接受这两个对象。(这只是个约定,如果TreeSet中compare和equals不一致,则有可能出现两个equals的Object都存入Set)

HashSet:
  1) 基于HashMap实现
  2) HashSet的elements存放于HashMap中的key中,HashMap的value对应的是同一个dummy Object.
  3) HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相 等
     注意,如果要把一个对象放入HashSet中,重写该对象对应类的equals方法,也应该重写其hashCode()方法。其规则是如果两个对 象通过equals方法比较返回true时,其hashCode也应该相同。另外,对象中用作equals比较标准的属性,都应该用来计算 hashCode的值。
   
LinkedHashSet:
   1)继承了HashSet,同时自己维护了一个元素插入链表,基于LinkedHashMap实现
   2)遍历集合的时候,会以插入顺序访问集合元素。 遍历效率优于HashSet, 因为是遍历的是链表而不是table。

TreeSet
  1)基于TreeMap实现 
  2)判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0
  3)因为需要比较,因此需要TreeSet中的元素类型一致。