概述
Set集合(不允许数据重复) 1.3.1 HashSet(无序存储)底层使用哈希表+红黑树,允许存放空值 1.3.2 TreeSet(有序存储)底层使用红黑树,不允许出现空值(NullPointerException) 要想将自定义类保存到TreeSet中,要么实现Comparable接口,要么向TreeSet中传入比较器(Comparator外部排序接口) java.lang.Comparable接口(内部比较器)-排序接口,只有一个参数,拿自己和别的比 一个类如果实现了Comparable接口则说明该类支持排序 排序方法:Collection.sort或Arrays.sort Comparator外部排序接口(外部比较器):若要控制某个自定义的顺序,而该类本身不支持排序(类本身没有实现Comparable接口) 我们可以建立一个该类的“比较器”来进行类的排序。 int compare(T o1,T o2);返回值与compareTo返回值完全一样, 返回正数,表示o1>o2;返回0,表示o1=o2;返回小数,表示o1<o2; 实现了Comparator接口进行第三方排序--策略模式,此方法更加灵活,可以轻松改变策略进行第三方的排序算法 重复元素的比较:TreeSet和TreeMap依靠Comparator或Comparable接口来区分重复元素。 自定义想要保存在TreeSet或TreeMap中; 1.直接实现Comparable接口,覆写CompareTo方法 2.实现一个比较器传入TreeSet或TreeMap来进行外部比较 而HashSet与HashMap并不依赖比较接口,此时想要区分自定义的元素是否重复,同时覆写equals和HashCode方法。 覆写equals方法的五个原则: 自反性:对于任何非空引用值x,x.equals(x)都返回true; 对称性:对于任何非空的x,y,当且仅当x.equals(y)返回true,y.equals(x)也返回true 传递性:对于任何非空的x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,一定有x.equals(z)返回true; 一致性:对于任何非空的x,y 非空性: 先调用hashCode(保证属性值相同的元素在一个桶中)计算出对象Hash码决定存放的数据桶,而后使用equals来比较元素是否相等,若相等,则不再放置元素, 若equals(保证同一个桶中属性值相同不再设置)返回false,则在相同桶之后,使用链表将若干元素链起来 若两个对象equals方法返回true,他们的hashCode必然要保证相等 但是两个对象的hashCode相等,equals不一定相等 当且仅当equals与hashCode方法均返回true,才认为两个对象真正相等。 1.4 集合输出(迭代器输出) 1.4.1迭代器:未来遍历集合而生----迭代器模式,只能从前向后输出(只有Collection集合可以使用) 调用Collection集合子类的Iterator方法取得内置的迭代器 Iterator(Scanner implements Iterator) 两个核心方法:boolean hasNext();判断是否还有下一个元素 E next();取得下一个元素 1.4.2双向迭代接口:ListIterator;List接口提供,Set不支持 除了hasNext和next方法外,还有:hasPrevious():判断是否有上一个元素;previous:取得上一个元素 要想使用从后向前遍历输出,首先至少要从前向后遍历一次才可使用。 1.4.3Enumeration(JDK1.0)枚举输出-Vector类支持 hasMoreElements():判断是否有下一个元素;nextElements():输出下一个元素 1.4.4for-each各个集合都可以使用 能用foreach输出的本质在于各个集合类都内置了迭代器 fail-fast CurrentModificationException发生在Collection集合使用迭代器遍历时,使用了集合类提供的修改集合内容方法报错 而如果使用Iterator迭代器的remove()不会出现此错误 但是在迭代器遍历时,不要修改集合内容!!! 不能直接list.remove();要在迭代器里list.remove() 快速失败策略保证了所有用户在进行迭代遍历集合时,拿到的数据一定是最新的数据(避免“脏读”产生) fail-safe 不产生ConcurrentModificationException异常
最后
以上就是酷炫水池为你收集整理的Set集合和迭代器输出的全部内容,希望文章能够帮你解决Set集合和迭代器输出所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复