day15笔记

来源:互联网 发布:提示mac中毒 mackeeper 编辑:程序博客网 时间:2024/06/07 01:29
Set接口:Set集合继承自Collection集合
 *
 * 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):使用比较多



 *