我是靠谱客的博主 酷炫水池,这篇文章主要介绍Set集合和迭代器输出,现在分享给大家,希望可以做个参考。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
Set集合(不允许数据重复)       1.3.1 HashSet(无序存储)底层使用哈希表+红黑树,允许存放空值       1.3.2 TreeSet(有序存储)底层使用红黑树,不允许出现空值(NullPointerException)             要想将自定义类保存到TreeSet中,要么实现Comparable接口,要么向TreeSet中传入比较器(Comparator外部排序接口)             java.lang.Comparable接口(内部比较器)-排序接口,只有一个参数,拿自己和别的比                一个类如果实现了Comparable接口则说明该类支持排序                排序方法:Collection.sortArrays.sort             Comparator外部排序接口(外部比较器):若要控制某个自定义的顺序,而该类本身不支持排序(类本身没有实现Comparable接口)                 我们可以建立一个该类的比较器来进行类的排序。                 int compare(T o1,T o2);返回值与compareTo返回值完全一样,                 返回正数,表示o1>o2;返回0,表示o1=o2;返回小数,表示o1<o2;                 实现了Comparator接口进行第三方排序--策略模式,此方法更加灵活,可以轻松改变策略进行第三方的排序算法 重复元素的比较:TreeSetTreeMap依靠ComparatorComparable接口来区分重复元素。               自定义想要保存在TreeSetTreeMap中;               1.直接实现Comparable接口,覆写CompareTo方法               2.实现一个比较器传入TreeSetTreeMap来进行外部比较          而HashSetHashMap并不依赖比较接口,此时想要区分自定义的元素是否重复,同时覆写equalsHashCode方法。          覆写equals方法的五个原则:          自反性:对于任何非空引用值xx.equals(x)都返回true;          对称性:对于任何非空的xy,当且仅当x.equals(y)返回true,y.equals(x)也返回true          传递性:对于任何非空的x,y,z,如果x.equals(y)返回truey.equals(z)返回true,一定有x.equals(z)返回true;          一致性:对于任何非空的x,y          非空性:          先调用hashCode(保证属性值相同的元素在一个桶中)计算出对象Hash码决定存放的数据桶,而后使用equals来比较元素是否相等,若相等,则不再放置元素,          若equals(保证同一个桶中属性值相同不再设置)返回false,则在相同桶之后,使用链表将若干元素链起来          若两个对象equals方法返回true,他们的hashCode必然要保证相等          但是两个对象的hashCode相等,equals不一定相等          当且仅当equalshashCode方法均返回true,才认为两个对象真正相等。    1.4 集合输出(迭代器输出)    1.4.1迭代器:未来遍历集合而生----迭代器模式,只能从前向后输出(只有Collection集合可以使用)    调用Collection集合子类的Iterator方法取得内置的迭代器        Iterator(Scanner implements Iterator)        两个核心方法:boolean hasNext();判断是否还有下一个元素 E next();取得下一个元素    1.4.2双向迭代接口:ListIteratorList接口提供,Set不支持    除了hasNextnext方法外,还有:hasPrevious():判断是否有上一个元素;previous:取得上一个元素    要想使用从后向前遍历输出,首先至少要从前向后遍历一次才可使用。    1.4.3EnumerationJDK1.0)枚举输出-Vector类支持    hasMoreElements():判断是否有下一个元素;nextElements():输出下一个元素    1.4.4for-each各个集合都可以使用    能用foreach输出的本质在于各个集合类都内置了迭代器    fail-fast    CurrentModificationException发生在Collection集合使用迭代器遍历时,使用了集合类提供的修改集合内容方法报错    而如果使用Iterator迭代器的remove()不会出现此错误    但是在迭代器遍历时,不要修改集合内容!!!    不能直接list.remove();要在迭代器里list.remove()    快速失败策略保证了所有用户在进行迭代遍历集合时,拿到的数据一定是最新的数据(避免脏读产生)    fail-safe    不产生ConcurrentModificationException异常

 

最后

以上就是酷炫水池最近收集整理的关于Set集合和迭代器输出的全部内容,更多相关Set集合和迭代器输出内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部