Day020 linkedlist
对于链表数据结构来说:基本的单元是节点,
每一个节点Node都有两个属性,一个属性是存储的数据
一个是下一节点的内存地址
-
链表优点:随机增删元素效率较高。(因为增删元素不涉及到大量的元素位移)、
所以随机增删元素的时候不会有大量元素位移,因此随机增删效率比较高,
在以后的开发中,如果遇到了随机增删集合中元素的业务比较多的时候,建议使用LinkedList
-
链表 缺点:查询效率较低,每一次查找某个元素的时候都需要从头节点开始往下遍历
不能通过数学表达式计算被查找元素的内存地址,每一次查找都是从头节点开始遍历,直到找到为止,所以ArrayList用的比LinkedList多。
![image-20210517203034065]()
LinkedList集合底层也是有下标的
注意:ArrayList之所以检索效率比较高,不单纯是因为有下标的原因,是因为底层数组发挥的作用,
LinkedList集合照样有下标,但是检索、查找某个元素的效率比较低,因为只能从头节点开始一个一个遍历
双向链表
基本单元还是节点Node
三部分:数据,上节点的内存地址,下一节点的内存地址
头尾节点是null

linkedlist集合有初始化容量吗? 没有!
最初这个链表中没有任何元素,first和last引用都是null
不管是linkedlist还是ArrayList,以后写代码时,不需要关心具体哪个集合因为我们要面向接口编程,调用的方法都是接口中的方法
面向的都是接口编程
-
linkedlist是双向链表
-
对于链表的数据结构来说,增删效率较高,检索效率较低,
-
链表中的元素,在空间存储上,内存地址是不连续的
Vector
-
底层也是一个数组
-
初始化的容量:10
-
怎么扩容:
-
-
扩容之后是原容量的2倍:10——》20;20——》40
-
ArrayList是扩容1.5倍 10——》15
-
-
Vector中所有的方法都是线程同步的,都是带有synchronized关键字,是线程安全的,效率较低,使用较少
-
怎么将一个线程不安全的ArrayList集合转换成线程安全的?
-
-
使用集合工具类: java.util.Collections;
-
java.util.Collection 是集合接口
-
java.util.Collections 是集合工具类
-

Collection。synchronizedlist(***);
泛型 <E>
-
jdk5.0 推出的新特性:泛型
迭代器取出的都是object
-
泛型这种语法机制,只在程序编译阶段起作用,只是给编译期参考的。(运行阶段泛型没用!!)、
-
使用泛型的好处:
-
-
集合中存储的元素类型统一
-
从集合中取出的元素类型是泛型指定的类型,不需要进行大量的“向下转型”
-
-
泛型的缺点:导致集合中取出的元素类型缺乏多样性
大多数业务中集合中元素的类型还是统一的,所以这种泛型特性被大家认可

-
jdk8 之后,引入了:自动类型推断机制。(又称钻石表达式)
自定义泛型
自定义泛型的时候<>尖括号的是一个标识符,随便写
java源代码中经常出现的是<E>和<T>
E是element单词的首字母
T是type单词的首字母
jdk5.0之后推出了一个新特性,叫做增强for循环,或者叫做foreach


浙公网安备 33010602011771号