Java第十五天-Set

set ;存储无序的,不可重复的元素,没有新增的方法,用的都是Collection下定义的方法
set中可以添加 null,无序性不等于随机性,指的是元素在底层存储的位置是无序的
不可重复性,当想set中添加相同元素的时候,后面的这个不能添加进去
要求添加进set中的元素所在的类,一定要重写equals()和hashCode()方法,保证set的不可重复性
Set中的元素如何存储的呢?使用了哈希算法
当想Set中添加对象时,首先调用此对象所在了类的hashCode()方法,计算此对象的哈希值,
哈希值决定了此对象在Set中的存储位置,若此位置之前没有对象值,则这个对象直接存储到此位置上
若此位置已有对象,再通过equals()方法比较两个对象的值是否相同,若相同,则后一个对象不能添加进去
万一返回false呢?

// >要求:hashCode()方法与equals()方法一致,即两个方法的结果要一致,避免出现哈希值相同,内容不同,或者
//内容相同,哈希值不相同

在这里插入图片描述TreeSet

1.向TreeSet中添加的元素必须是同一类的

2.可以按照添加进集合的元素的指定顺序遍历,像String,包装类默认按照从小到大的顺序遍历

3.当自定义类没有实现Comparable接口时,当像TreeSet中添加自定义类对象时,报数据类型转换异常

4.当向TreeSet中添加自定义对象时,有两种排序方法。

①自然排序 ②定制排序

自然排序:要求自定义类实现java.lang.Comparable接口并重写compareble(object o )方法,指明按照自定义一类的哪个属性进行排序
定制排序:①创建一个实现了Comparator接口的类的对象

②将此对象作为形参传递给TreeSet的构造器中

③向TreeSet中添加Comparator接口中的compare方法中涉及的类的对象

5.向TreeSet中添加元素时,首先按照compareTo()进行比较,一旦返回0,虽然只是两个对象的此属性值相同,但是程序会认为这两个对象时相同的,进而后一个对象不能添加进来

compareTo()与hashCode()以及equals()三者保持一致

在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_34343249/article/details/89221041