JavaSE 集合 Set
标签(空格分隔): JavaSE Set
Set
- 散列表
- 常见API
继承collenction中的方法没有自己的方法 - 迭代方式
只能用迭代器方式迭代
HsahSet
-
无序散列表根据hashcode进行排序
插入时先进行hashcode判断如果不相同则直接插入
当相同时者比较equals方法不相同加入 -
需要重写hashcode和equals
如果不重写hashcode
比较地址的hashcodo不同直接添加
如果不重写equals
使用=进行判段
而==是比较物理地址
所以需要配合两个重写方法来实现 -
内存泄漏-删除问题
当一个对象被存储进HashSet集合中以后,就不能修改该对象的参与计算哈希值的属性值了,否则对象修改后的哈希值与最初存储进HashSet集合中时的哈希值就不同了,在这种情况下,即使在contains方法使用该对象的当前引用作为参数去HashSet集合中检索对象,也将返回找不到对象的结果,这也会导致无法从HashSet集合中删除当前对象,造成内存泄露。
TreeSet
-
实现SortedSet接口
-
要求可比较实现Comparable或者Comparator接口
-
默认比较字典顺序
实现Comparable接口 compareTo()进行排序和比较 -
自定义排序实现comparator接口
TreeSet(Comparator<? super E> comparator)
static <T extends Comparable<? super T>> void sort(List<T> list) 排序 按字典排序
实现 Comparable 接口
//主动调用 compareTo()
public int compareTo(Object o){
//this - o 升序
return ;
}
static <T> void sort(List<T> list, Comparator<? super T> c) 创建Comparator对象
Collections.sort(list, new Coparator<People>(){
public int compare(People o1,People o2){
return o1.getName().compareTo(o2.getName())
}
})
推荐使用Comparator对象因为是自定义的比较所以能够修改,而Comparable是不能修改的不灵活