Collection接口中常用方法

  • add(E e) -> 添加元素到集合中.
  • remove(Object o) -> 从集合中删除参数(如果删除成功则返回true,如果失败则返回false)
  • isEmpty() -> 判断集合是否为空(集合中有没有元素)
  • clear() -> 清空集合中的元素
  • contains(Object o) -> 判断集合中是否包含参数o(如果包含返回true,如果不包含返回false)
  • size() -> 获取集合的长度
    List接口中常用方法
  • 增加元素
  • add(int index,E e) -> 将元素添加指定索引位.
  • 删除元素
  • remove(int index) -> 删除指定索引位的元素.
  • 修改元素
  • set(int index,E e) -> 使用参数e替换指定索引位的元素.
  • 查找元素
  • get(int index) -> 获取指定索引位的元素.
    Set集合特点
  • Set集合的特点
  • 元素唯一(元素不重复)
  • Set集合中因为是无序所以没有索引,通过什么方式可以遍历Set集合?
  • 增强For/迭代器
    哈希值
    什么是哈希值
  • 是Jdk根据对象的地址/String/数字算出来一串数字(int)
  • 如何获取对象的哈希值?
  • hashCode()是Object类的方法,所以说Java的对象都可以调用这个hashCode方法返回哈希值.
  • 哈希值有什么特点?
    如果自定义类没有重写hashCode方法,那么自定义类的对象生成的哈希值是根据对象的内存地址值生成的,所以说即便两个对象的属性一样,哈希值也不一样
    如果两个对象属性一样,那么两个对象哈希值也要一样,所以在自定义的类中重写了hashCode方法(不调用Object类hashCode),是根据对象的属性生成哈希值.
    两个对象哈希值一样,不代表两个对象的属性一样.两个对象的属性一样,则两个对象的哈希值肯定一样.
    数字的哈希值是它本身.

常见数据结构之哈希表

  • <Java8之前哈希表是通过什么实现的?Java8之后是通过什么实现的?
  • Java8之前数组+链表.
  • Java8之后数组+(链表)红黑树
  • <Hash表如何计算元素在数组中存储的位置?
  • 使用元素的hash值对16取余(因为数组的初始化长度就是16) rehashed(再哈希)

  • <LinkedHashSet是由什么实现的?特点是什么?
  • 链表+哈希表来实现的 ,在保证元素唯一的同时也保证元素的存入顺序和取出顺序是一致的.
  • 哈希表保证了什么特性?
  • 元素唯一的特性.
    链表保证了什么特性?
  • 有序、存入顺序和取出顺序

自然排序
-如果想要让TreeSet帮我们排序自定义的对象,那么自定义的对象所在的类必须实现Comparable.
如何自定义TreeSet中的排序规则?
compareTo方法中有一个参数,这个参数是做什么用的?
- this代表比较者 参数代表被比较者.
compareTo方法最终返回一个int类型的值,返回0,正数,负数分别代表什么?
- 返回0 -> 表示比较者和被比较者重复.
- 返回正数 -> 升序排列
- 返回负数 -> 降序排列
如果compareTo方法中只是单个条件,应该如何书写?
- 直接将单个条件的结果返回.
如果compareTo方法中是多个条件,主要条件和次要条件如何区分,如何书写?
- 当主要条件对比完成之后的结果是0的时候再进行次要条件的对比.
- 要判断 -> 主要条件对比完成的结果是不是0.
基本数据类型和引用数据类型如何进行比较?(以int/string为例)
如何使用自然排序进行比较?
- 集合中的泛型类要实现Comparable -> 还要加泛型Student implments Comparable
- 实现接口中compareTo方法.
- 分清主要条件与次要条件 -> 进行主要条件的对比(基本数据类型,就相减或者是引用数据类型,就再compareTo方法进行对比)
- 当主要条件对比完成之后判断结果,如果结果是0的话,使用次要条件继续进行对比,然后将次要条件的结果进行赋值.