Set集合概述和特点
- 不包含重复元素的集合
- 没有带索引的方法,所以不能使用普通for遍历循环
哈希值
哈希值:是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
Objiect类中获取对象的哈希值的方法:
public int hashCode(); // 返回对象的哈希码值
对象的哈希值特点:
- 同一个对象多次调用hashCode()方法返回的哈希值是相同的
- 默认情况下,不同对象的哈希值是不同的,而重写hashCode()方法,可以实现让不同对象的哈希值相同
HashSet集合概述和特点
- 底层数据结构是哈希表
- 对集合的迭代顺序不作任何保证(存入数据和取出数据顺序可能会改变)
- 没有带索引的方法,使用增强for遍历(foreach),不能使用普通for
- 不包含重复元素,重复元素存不进
HashSet集合保证元素唯一性原理
LinkedHashSet集合概述和特点
- 哈希表和链表实现的Set接口,具有可预测的迭代次序
- 由链表保证元素有序,也就是说元素的存储和取出顺序是一致的
- 由哈希表保证元素唯一,也就是说没有重复顺序
TreeSet集合概述和特点
- 元素有序,这里的顺序不是指存储和取出有序,而是按照一定的规则进行麦序,具体排序方式取决于构造方法
- TreeSet():根据其元素的自然排序进行排序,比较对象时,对象类使用compareTo<对象类名>接口,再根据要求重写对象类里的compareTo(Object o)方法
- TreeSet(Comarator Comparator):根据指定的比较器进行排序
- 由于没有带索引的方法,所以不能使用普通for循环遍历
- 由于是Set集合,所以不包含重复的元素
TreeSet(Comarator Comparator):根据指定的比较器进行排序源码
public class TreeSetDemo02 {
public static void main(String[] args) {
// 创建Tree对象t,以及构造内部类Comparator
TreeSet<Student02> s = new TreeSet<Student02>(new Comparator<Student02>() {
@Override
// 实现先年龄按自然排序(大小),年龄相同名字按自然排序
public int compare(Student02 s1, Student02 s2) {
// 比较年龄
int num = s1.getAge() - s2.getAge();
int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
return num2;
}
});
// 创建实例对象
Student02 s1 = new Student02("xishi",18);
Student02 s2 = new Student02("yangyuhuan",19);
Student02 s3 = new Student02("diaocan",17);
Student02 s4 = new Student02("wangzhaojun",17);
s.add(s1);
s.add(s2);
s.add(s3);
s.add(s4);
// 遍历输出
for (Student02 i:s) {
System.out.println(i);
}
}
}
控制台结果
Student02{name='wangzhaojun', age=17}
Student02{name='xishi', age=18}
Student02{name='yangyuhuan', age=19}
|