20201009+袁鑫
知识总结:
ArrayList 、vector、 LinkedList区别
相同
- 都是java.util.List 接口的实现类
- 都是有序的,可排序、可重复、可存null的集合
- 都支持迭代器操作
区别
- 实现接口不同
- ArrayList和Vector未实现Queue接口,Dqueue接口,Dqueue接口,不支持队列操作
- LinkedList下hi闲了Queue和Deque接口支持队列操作,同时支持栈操作
- 内部实现不同
- Vector、ArrayList内部采用数组来存元素
- 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(数组+链表+红黑树)
- 两者所继承的类不同
- 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
实现了大量的静态方法,用于实现对集合元素的排序、查找和替换等操作。
泛型
参数的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,使代码可以应用于多种类型。
三种泛型定义方式:
java
Map<String> map = new HashMap<String>();
//编译时候和传参的时候都写,能正确检索存值,能正确传递参数
java
Map<String> map = new HashMap<>();
//编译的时候写,传参的时候不写,能正确检索存值,能正确传递参数 是最常用的
-
Map<> map = new HashMap<String>(); //编译的时候不写,传递参数的时候写,不能正确检索存值,不能正确传递参数 即存值的时候都会存,传递的时候会检索参数是否符合
擦除
java泛型是使用擦除来实现的
原始类型 就是删去类型参数后的泛型类型名。
擦除类型变量,并替换为限定类型(边界类型)
若无显示的边界 则默认以类型Object为边界
在泛型代码内部 无法获取任何有关泛型类型的信息,
可以知道类型参数的标识符 和 泛型类型边界,却无法知道用来创建特定实例的实际类型参数
学习心得:
集合的学习 有些难度,感觉东西有些杂乱,需要自己多梳理整理。
点赞
评论留言