Set
无序的,不可重复的|去重
无序:存放数据的顺序与内部真实存储的顺序不一致
去重:如果有重复的数据,那么只能输出一个
集合不包含元素对e1和e2 ,使得e1.equals(e2)和最多一个null元素。
新增功能: static
遍历方式:
foreach
iterator迭代器
TreeSet:
底层结构:红黑树
特点:查询效率较高,自动把数据做生序排序
底层是由TreeMap维护的
新增功能:新增一些与比较大小相关的方法
遍历方式:
For each
Iterator迭代器
注意 : TreeSet需要存储相同类型的数据,因为会默认存在比较排序
常用类:
E ceiling(E e) 返回此set中大于或等于给定元素的 null元素,如果没有这样的元素,则 null 。
E floor(E e) 返回此set中小于或等于给定元素的最大元素,如果没有这样的元素,则 null 。
E first() 返回此集合中当前的第一个(最低)元素。
E last() 返回此集合中当前的最后一个(最高)元素。
E higher(E e) 返回此集合中的最小元素严格大于给定元素,如果没有这样的元素,则 null 。
E lower(E e) 返回此集合中的最大元素严格小于给定元素,如果没有这样的元素,则 null 。
E pollFirst() 检索并删除第一个(最低)元素,如果此组为空,则返回 null 。
E pollLast() 检索并删除最后一个(最高)元素,如果此集合为空,则返回 null 。
TreeSet存储javabean类型的数据:
去重与排序:
都是根据比较规则实现的,与equals没有关系
比较规则:
内部比较器|内部比较规则|自然顺序:
比较规则定义在javabean类型的内部
javabean类型实现Comparable接口,重写compareTo(T o)方法,在方法中定义比较规则
外部比较器|外部比较规则|定制排序 :
比较规则定义在javabean类型的外部
定义一个实现类,实现Comparator接口,重写int compare(T o1, T o2),在方法中定义比较规则
Arrays.sort(数组) 默认升序排序
匿名内部类 : 简化没有类自己作用的实现类
Lambda : 简化匿名内部类对象,要求必须为函数式接口才能简化
lambda表达式作为实参传递 -> 可以把行为作为参数传递
注意: TreeSet去重,排序,都根据比较规则实现 如果指定外部比较规则,使用外部比较规则,没有指定外部,使用内部比较规则,都不在,抛出类型转换异常ClassCastException
HashSet:
List 有序,可重复
Set 无序,不可重复
TreeSet:默认圣墟排序
HashSet:
底层结构:哈希表(数组+链表+红黑树)
特点:查询,增删效率高,去重,无序
应用场景: 适合用在去重,无序,增删查效率较高情况
底层是由HashMap维护的
遍历:for each iterator迭代器
此类允许null元素。
请注意,此实现不同步。
存储Javabean类型数据实现去重: 需要Javabean类型重写hashcode与equals方法,需要根据对象的属性值进行计算|判断,不能根据对象地址
思考: 重写hashcode与equals以后 两个对象hashcode相等,equals就一定相等? 不一定 两个对象equals相等,hashcode一定相等? 一定
System.out.println(new Integer(105).hashCode());//如果是整数那么hasgCode的返回值就是整数本身