一、Set
元素无序(指存储和取出的顺序)、唯一
1,HashSet
不保证元素的迭代顺序,并且不保证该顺序恒久不变。
怎么保证按顺序呢?
HashSet底层数据是哈希表。依赖两个方法:hashCode()和equals()。
重写hashCode()
public int hashCode(){
return this.name.hashCode() + this.age;
}
重写equals()
public boolean equals(Object obj){
if(this == obj){return true;}
if(!(obj instanceOf Student)){return false;}
Student s = (Student)obj;
return this.name.equals(s.name) && this.age == s.age;
}
2,TreeSet
根据构造方法的不同,选择使用自然排序或者比较器排序。
按照实际的需求,可以对元素进行排序,并且保证唯一。
怎么保证呢?两种方法:
A:元素具备比较性;自然排序
TreeSet的无参构造,要求对象所属的类实现Comparable接口。
B:集合具备比较性;比较器排序
TreeSet的带参构造,要求构造方法接收一个实现了Comparator接口的对象。唯一,根据返回值是否为0.
二、
Collection体系的集合总结
Collection
List
ArrayList——底层数据结构是数组,查询快,增删慢。
线程不安全,效率高
LinkedList——底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
Vector——底层是数组,查询快,增删慢。
线程安全,效率低。
Set
HashSet——底层数据结构是哈希表。
使用hashCode()和equals()保证元素唯一性。
TreeSet——底层数据结构是二叉树。
使用自然排序,实现Comparable接口;或者使用比较器实现Comparator接口;保证元素唯一、有序。
三、
Collections
是针对Collection集合操作的工具类
面试题:Collection与Collections的区别?
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
功能:
1) 排序(Sort)
使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此列表内的所有元素都必须是使用指定比较器可相互比较的。
2) 混排(Shuffling)
混排算法所做的正好与 sort 相反: 它打乱在一个 List 中可能有的任何排列的踪迹。也就是说,基于随机源的输入重排该 List, 这样的排列具有相同的可能性(假设随机源是公正的)。这个算法在实现一个碰运气的游戏中是非常有用的。例如,它可被用来混排代表一副牌的 Card 对象的一个 List 。另外,在生成测试案例时,它也是十分有用的。
3) 反转(Reverse)
使用Reverse方法可以根据元素的自然顺序 对指定列表按降序进行排序。
4) Rotate
根据指定的距离循环移动指定列表中的元素。
Set类、Collections
最新推荐文章于 2023-04-08 17:04:54 发布