Day020 linkedlist

linkedList

对于链表数据结构来说:基本的单元是节点,

每一个节点Node都有两个属性,一个属性是存储的数据

一个是下一节点的内存地址

  • 链表优点:随机增删元素效率较高。(因为增删元素不涉及到大量的元素位移)、

所以随机增删元素的时候不会有大量元素位移,因此随机增删效率比较高,

在以后的开发中,如果遇到了随机增删集合中元素的业务比较多的时候,建议使用LinkedList

 

  • 链表 缺点:查询效率较低,每一次查找某个元素的时候都需要从头节点开始往下遍历

    不能通过数学表达式计算被查找元素的内存地址,每一次查找都是从头节点开始遍历,直到找到为止,所以ArrayList用的比LinkedList多。


    image-20210517203034065

LinkedList集合底层也是有下标的

注意:ArrayList之所以检索效率比较高,不单纯是因为有下标的原因,是因为底层数组发挥的作用,

LinkedList集合照样有下标,但是检索、查找某个元素的效率比较低,因为只能从头节点开始一个一个遍历

双向链表

基本单元还是节点Node

三部分:数据,上节点的内存地址,下一节点的内存地址

头尾节点是null

image-20210517203441513

 

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 是集合工具类

image-20210518150843802


Collection。synchronizedlist(***);

 

泛型 <E>

  • jdk5.0 推出的新特性:泛型

迭代器取出的都是object

  • 泛型这种语法机制,只在程序编译阶段起作用,只是给编译期参考的。(运行阶段泛型没用!!)、

  • 使用泛型的好处:

    • 集合中存储的元素类型统一

    • 从集合中取出的元素类型是泛型指定的类型,不需要进行大量的“向下转型”

  • 泛型的缺点:导致集合中取出的元素类型缺乏多样性

大多数业务中集合中元素的类型还是统一的,所以这种泛型特性被大家认可

image-20210518153104056

  • jdk8 之后,引入了:自动类型推断机制。(又称钻石表达式)

自定义泛型

自定义泛型的时候<>尖括号的是一个标识符,随便写

java源代码中经常出现的是<E><T>

E是element单词的首字母

T是type单词的首字母

增强for循环

jdk5.0之后推出了一个新特性,叫做增强for循环,或者叫做foreach

image-20210519141807912

foreach有一个缺点:没有下标,在一些需要下标的地方不建议使用。

posted @ 2021-05-19 14:22  各人blanknote  阅读(64)  评论(0)    收藏  举报