20201009+袁鑫

知识总结:

ArrayList 、vector、 LinkedList区别

相同
  • 都是java.util.List 接口的实现类
  • 都是有序的,可排序、可重复、可存null的集合
  • 都支持迭代器操作
区别
  • 实现接口不同
    1. ArrayList和Vector未实现Queue接口,Dqueue接口,Dqueue接口,不支持队列操作
    2. LinkedList下hi闲了Queue和Deque接口支持队列操作,同时支持栈操作
  • 内部实现不同
    1. Vector、ArrayList内部采用数组来存元素
    2. LinkedList内部采用链表来存元素
  • 线程安全不同
    • ArrayList、LinkedList 非线程安全,适用单线程
    • Vector线程安全,适用多线程
  • 扩容方式不同
    • ArrayList 1.5倍 增长
    • Vector 固定增量(三目运算–>给定增量就用给定的值,没给就是2倍)
    • LinkedList 链表不用扩容
  • 增删效率不同
    • ArrayList 和 Vetor 增删效率慢 因为要改动其他元素
    • LinkedList 相较更快,因为链表形式直接插入,只需要改变前后元素指向
  • 是否支持随机访问
    • ArrayList 和 Vector 可根据索引访问
    • LinkedList只能通过头尾遍历

HashMap和Hashtable区别

相同

​ 都实现了Map接口,都用于存放键值对,都采用哈希表实现

区别
  • 是否支持线程安全

    HashMap 非线程安全
    Hashtable 线程安全

  • 内部实现类不同
    • HashMap(数组+链表+红黑树)
      当链表长度大于8,转换为红黑树;
      当链表长度小于6,转换为链表;
    • Hashtable (数组+链表)
  • 两者所继承的类不同
    • HashMap:支持null键和null值
    • Hashtable:不支持null键和null值
  • 扩容方式
    • HashMap:初始为16,2倍增长
    • Hashtable :初始为11,2倍+1增长
  • 对元素位置的计算方式不同
    • HashTable是直接用元素的hashcode求模得到index存储
    • HashMap是用hash方法重新获取hashcode of element 再求模得到index来存储
Properties

Properties类表示一组持久的属性。Properties可以保存到流中或从流中加载。属性列表中的每个键及其对应的值都是一个字符串

操作和Hashtable基本一致,只要用于从流中记载或保存到流中去。(JDBC模板会使用)

Collections类

java.util.Collections是java提供的一个集合操作的工具类。

如果提供给它们的集合或类对象为null,则此类的方法都抛出一个NullPointerException

实现了大量的静态方法,用于实现对集合元素的排序、查找和替换等操作。

泛型

参数的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,使代码可以应用于多种类型。

三种泛型定义方式:

  1. java
    Map<String> map = new HashMap<String>();
    //编译时候和传参的时候都写,能正确检索存值,能正确传递参数
  1. java
    Map<String> map = new HashMap<>();
    //编译的时候写,传参的时候不写,能正确检索存值,能正确传递参数 是最常用的
  1. Map<> map = new HashMap<String>();
    //编译的时候不写,传递参数的时候写,不能正确检索存值,不能正确传递参数 即存值的时候都会存,传递的时候会检索参数是否符合
    

    擦除

    java泛型是使用擦除来实现的

    原始类型 就是删去类型参数后的泛型类型名。

    擦除类型变量,并替换为限定类型(边界类型)

    若无显示的边界 则默认以类型Object为边界

    在泛型代码内部 无法获取任何有关泛型类型的信息,

    可以知道类型参数的标识符 和 泛型类型边界,却无法知道用来创建特定实例的实际类型参数

学习心得:

集合的学习 有些难度,感觉东西有些杂乱,需要自己多梳理整理。

标签

评论

this is is footer