Set集合

一、感性认知:

1、对比List集合来看Set集合,感受差异化,想象距离任意情景,比较何时用List集合,何时用 Set集合。

二、理性认知:

1、集合结构图

a、java.util.Collection[I]

java.util.List[I]

java.util.ArrayList[C]

java.util.LinkedList[C]

java.util.Vector[C]

java.util.Stack[C]

java.util.Set[I]

java.util.HashSet[C]

LinkedHashSet[C]

java.util.SortedSet[I]

java.util.NavigableSet[I]

java.util.TreeSet[C]

java.util.Map[I]

java.util.SortedMap[I]

java.util.TreeMap[C]

java.util.HashTable[C]

java.util.HashMap[C]

java.util.LinkedHashMap[C]

java.util.WeakHashMap[C]

2、Set集合的存储特点

a、Set集合内部使用Map集合来存储。

b、HashSet集合,元素具有互斥性。(用代码举例)

c、HashSet集合,元素插入存储的顺序和遍历访问的数序,是不一致的。即,无序性。

e、TreeSet集合,存储其中的元素会按照compareTo比较出来的结果进行排序。

e.1、无序性:插入顺序和存储顺序不一定一致。

e.2、有序性:该集合中的元素均按照升序排列。

e.3、互斥性,与HashSet相同。

f、LinkedHashSet集合,继承自HashSet

f.1、有序性:元素的访问可以按照插入的顺序进行访问。

f.2、无序性:元素的存储顺序并不一定按照插入的顺序进行。

(PS:通过链表实现插入顺序和实际存储下标的唯一映射)

3、HashSet与LinkedHashSet比较:

a、HashSet:添加元素快。

b、LinkedHashSet:添加元素慢

(PS:LinkedHashSet额外维护了一个插入顺序的链表,消耗更多。)

4、Iterator:

即Set集合的遍历,Interator it = set.iterator();

与List集合的迭代器遍历相似。

5、Iterator与ListIterator比较:

a、前者:提供集合的迭代方法,hasNext(),next(),remove();

b、后者:提供向前向后的迭代方法,还可以返回迭代时的下标索引。

提供添加元素的方法,将元素添加至当前指针所指向的位置。

提供设置元素的方法,将当前指针所指向的位置的元素设置为指定值。

6、TreeSet排序原理:

使用CompareTo方法进行排序,如果是自定义类,那么需要让该类实现Comparable接口

如果欲实现按照某个数据升序排序TreeSet集合中的对象,那么使用:

this.field – obj.field(升序)

obj.field – this.field(降序)

7、HashSet去重原理:

a、判断添加元素的HashCode是否相同。

b、判断添加元素的equals是否相同。


版权声明:本文为qq_16624353原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_16624353/article/details/52564612