*
* Set:底层数据结构是一个哈希表,能保证元素是唯一的,元素不重复!
* 它通过它的子实现了HashSet集合去实例化,HashSet集合底层是HashMap集合的实例!
*
* 需求:Set集合存储字符串元素并遍历
需求:使用HashSet集合存储自定义对象并遍历
* List集合和Set集合的区别?
* Set:元素是唯一的,无序性(存储和取出不一致)
* List:元素可以重复,有序性(存储和取出一致)
*
* 由于现在是自定义对象:在当前自定义对象的类中没有重写两个方法
* hashCode和equals()方法;HashSet底层是依赖于这两个实现来保证元素的唯一性
Set集合的子实现类:
* 此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;
* 特别是它不保证该顺序恒久不变。。
*
* 看源码
*
* HashSet集合的add()方法,底层是依赖于双列集合HashMap<K,V>的put(K key,V value)来实现的
* put(K key,V value):
* 底层又依赖于HashCode()和equals()方法,传递添加元素的时候,首先判断的是
* 每一个元素对应的HashCode值是否一样,如果HashCode值一样,还比较他们的equals()方法,由于现在集合存储的是String类型,String类型本身重写
* 了equals()方法,所以,默认比较的是内容是否相同,如果内容相同,这里最终返回的就是第一次存储的那个元素,由这两个方法保证元素唯一性!
具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。
*
* LinkedHashSet集合:
* 由哈希表保证元素的唯一性
* 由链接列表来保证元素的有序性!
TreeSet:Set集合中的一个重点
*
* TreeSet集合底层是依赖于TreeMap的实例,而TreeMap<K,V>是依赖于红黑树结构实现的
* 分两种:
* 自然排序:
* 比较器排序
* 这种排序的使用取决于开发者是用什么样的构造方法
*
* TreeSet存储Integer类型添加以下元素
* 20,18,23,22,17,24,19,18,24
TreeSet集合存储自定义对象并遍历
* 实现了compareable接口,重写了comapreTo()方法,里面的逻辑是一个排序条件:
* 需求:
* 按照学生的年龄从小到大进行排序:主要条件
* 对于自定义对象什么情况下保证元素是唯一的
* 成员变量的值相同,认为是同一个元素
* 主要条件给定,需要分析次要条件
*
* 一个类中的元素想要自然排序,那么必须实现Compareable接口,实现compareTo(类名 对象名){}方法
*
* 按照正常存储对象的操作以及遍历对象出现了问题:
* 类转换异常
* java.lang.ClassCastException: org.westos_04.Student cannot be cast to java.lang.Comparable
需求:按照学生姓名长度从小到大进行排序
需求:按照学生姓名长度从小到大进行排序
*
* //元素唯一性:取决返回值是否为0
* 要使用TreeSet集合的比较器排序:
* 依赖于构造方法:
* public TreeSet(Comparator<E> comparator)
*
* 两种方式实现比较器排序:
* Comparator接口作为形式参数进行传递,需要该接口的子实现类对象
Random:产生一个随机数的类:
*
* 构造方式:
* public Random()创建一个新的随机数生成器:默认种子不给定long类型的时间毫秒值
* 成员方法:
* public int nextInt():由随机数生成器调用这个方法,随机数的范围在int类型的范围之内
* public int nextInt(int n):生成随机数的范围:[0,n):使用比较多
*