集合Set:实现了collection接口
确定性:对任意对象都能够判定是否属于某一个集合
互异性:集合内的每个单元都是无差异的,注意是内容无差异
无序性:集合内的顺序无关
Java中的集合接口Set:
-- HashSet(基于三列函数的集合,无序,不支持同步)
--TreeSet(基于树结构的集合,可排序的,不支持同步)
--LinkedHashSet(基于三列函数和双向链表的集合,可排序的,不支持同步)
*HashSet,linkedHashSet,TreeSet 的元素都只能够是对象
- HashSet和LinkedHashSet判定元素重复的原则
1.判断两个元素的hashCode返回值是否是相同,若不同,返回false
2.若两者的hashCode返回值相同,判定equals方法,若不同,返回false,否则返回true
- TreeSet判定元素重复的原则:
- 需要元素实现Comparable接口
- 比较两个元素的compareTo方法
=================================分割线=================================
HashSet:
- 基于HashMap实现的,可以容纳null元素,不支持同步 (若要实现同步:Set s=Collections.synchronizedSet(new HashSet(…));)
- add 添加一个元素
- clear 清除整个HashSet
- contains 判定是否包含某一个元素
- remove 删除某一个元素
- size大小
- retainAll 计算两个集合交集
import java.util.HashSet;
import java.util.Iterator;
public class HashSet_test {
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet<Integer> hs=new HashSet();
boolean bool=hs.add(0);
System.out.println("HashSet添加一个不重复的值,结果:"+bool);
hs.add(1);
hs.add(2);
hs.add(3);
boolean bool1=hs.add(null);
System.out.println("HashSet添加null值,结果:"+bool1);
boolean bool2=hs.add(3);
System.out.println("HashSet添加相同元素 ,结果:"+bool2);
Iterator itemr=hs.iterator();
while(itemr.hasNext()){
System.out.println(itemr.next());
}
hs.remove(1);
System.out.println("--------分割线-----------");
Iterator itemr2=hs.iterator();
while(itemr2.hasNext()){
System.out.println(itemr2.next());
}
}
}
================================分割线=================================
LinkedHashSet:
- 继承HashSet,也是预计HashMap实现的,可以容纳null元素
- 不支持同步 (若要实现同步:Set s=Collections.synchronizedSet(new LinkedHashSet(…));)
- 方法和HashSet基本一致
- add、clear、contains、remove、size
- 通过一个双向链表维护插入顺序
==============================分割线=====================================
TreeSet:
- 基于TreeMap实现,不可以容纳null元素(若要实现同步:SortedSet s=Collections.synchronizedSortedSet(new TreeSet(…));)
- add添加一个元素
- clear清除整个TreeSet
- contains判断是否包含某一个元素
- remove删除某一个元素
- size大小
- 根据compareTo方法指定Comparator排序