泛型机制

基本概念

  • 通常状况下汇合中能够寄存不同类型的对象, 是因为将所有对象都看做Objcet类型放入的, 因而从汇合中取出元素时也是Object类型. 为了表白该元素实在的数据类型, 则须要强制类型转换, 而强制类型转换可能会引发 类型转换异样
  • 为了防止上述谬误的产生, 从Java5开始减少泛型机制,也就是在汇合名称的右侧应用<数据类型>的形式来<u>明确要求该汇合中能够寄存的元素类型</u>. 若放入其它类型的元素则编译报错
  • 泛型只在编译期间无效, 在运行期间不辨别是什么类型

底层原理

  • 泛型的实质就是参数化类型, 也就是让数据类型作为参数传递.其中E相当于形式参数负责占位, 而应用汇合时<>中的数据类型相当于理论参数, 用于给形式参数E进行初始化, 从而使得汇合中所有的E被理论参数替换. 因为理论参数能够传递各种各样宽泛的数据类型,因而得名为泛型
/* 无关泛型 */// i叫做形式参数,负责占位int i;public static void show(int i){    ...}// 10叫做理论参数,负责给形式参数初始化show(10);/* 泛型 */// E叫做形式参数,负责占位// String叫做理论参数E = String;public interface List{    ...}

Set汇合

基本概念

  • java.util.Set汇合是Collection汇合的子集合,与List汇合平级
  • 该汇合中元素没有先后放入秩序,且不容许反复
  • 该汇合的次要实现类是HashSet, TreeSet, LinkedHashSet

    • HashSet类的底层是采纳哈希表进行数据管理的
    • TreeSet类的底层是采纳红黑树进行数据管理的
    • LinkedHashSet类在外部保护了一个双向链表,链表中记录了元素的迭代程序,也就是元素插入汇合的先后顺序,因而便于迭代

罕用的办法

参才Collection汇合中的办法Collection汇合罕用办法

元素放入HashSet汇合的原理

  • 应用元素调用hashCode办法获取对应的哈希玛值, 再由某种哈希算法计算出该元素在数组中的索引地位
  • 若该地位没有元素,则将该元素间接放入即可
  • 若该地位有元素, 则应用新元素与已有元素比拟哈希玛值.

    • 若哈希值不雷同, 则将该元素间接放入
    • 若哈希值雷同,则应用新元素调用equals办法与已有元素顺次比拟

      • 若相等则增加元素失败,否则将元素间接放入即可

TreeSet汇合的概念

Map汇合

基本概念

罕用的办法

元素放入HashMap汇合的原理

相干的常量

Collection类

Map汇合

基本概念

罕用的办法

思考

为什么要求重写equals办法后要重写hashCode办法

[解析参考]
当两个元素调用equals办法相等时证实两个元素雷同.
重写hashCode办法后保障这两个元素失去的哈希玛值雷同,那么由一个哈希算法生成的索引地位雷同. 此时只须要与该索引地位已有元素比拟即可,从而提高效率并防止反复元素的呈现