程序员java学习记录

java集合---LinkedList

2020-04-20  本文已影响0人  一花一世界yu

一、重点知识

TreeSet里面存储的元素需要是类型相同的,不然无法比较,无法排序

泛型,指定集合中存储元素的数据类型,保护容器中数据类型的安全

for循环中,即使i++写在输出语句中,也会改变循环中i的值

一个\t等于八个空格

HashMap集合中相同位置上的元素使用单链表连接在一起的,只能从前向后查找

Vector的遍历方式不同于其他的List集合
Vector<String> v1 = new Vector<>();
v1.add("aaa");
v1.add("bbb");
v1.add("ccc");
Enumeration<String> elements = v1.elements();
while(elements.hasMoreElements()){
String s = elements.nextElement();
System.out.println(s);
}

栈Stack继承于Vector,实现了先进后出功能,但是LinkedList也能实现此功能

当数组容量不够进行扩容时
Vector两倍扩容
ArrayList1.5倍扩容

在LinkedList中有很多方法不同但是作用是一样的

二、重点问题

1、List有第四种迭代方式,ListIterator是List特所的特有的方法

hasNxet()----->next();----从前向后迭代

hasPrevious()----->previous();----从后向前迭代

迭代器不管哪种类型,初始化后默认指针都在集合的最开始

ListIterator里面也有hasnext()和next()方法,想使用hasPrevious()----->previous();就得先hasNxet()----->next();使指针移到末尾

------如果你想在list集合中遍历两次,用ListIterator这种迭代器就不用创建两个迭代器了

在集合中我们最常用的是普通for循环

2、迭代器,每次next都会获取一个对象

注意点,注意iterator中next()的使用

Iterator<Course> it1 = courses.iterator();

while (it1.hasNext()){

    System.out.println(it1.next().courseName + it1.next().score);

}

迭代器,每次next都会获取一个对象

上述代码等于调用了两次next();是错误的

3.LinkedList底层中用的是双向链表,在内存空间是不连续的,因为是双向链表所以他可以模拟栈和队列这两种数据结构

LinkedList实现了继承于queue的deque接口所以他多了很多关于队列的方法

queue是队列 ----->实现了collection接口

deque双端队列(双端队列,不仅能操控开头,还能操控结尾)

FIFO队列的存储特点,先进先出(在安卓消息队列方面有所体现)

LIFO栈得存储特点,后进先出(last in first out)

模拟队列的方法
入队offer();
出队poll();

模拟栈的方法
入栈push();
出栈pop();

三、课堂知识

LinkedList集合

LinkedList集合:底层实现:采用双向链表的结构实现。

 优点:更改集合中的元素,效率很高。

  缺点:遍历集合中的元素,效率相对低。

queue:队列

deque:double -ended queue,双端队列

​LinkedList实现类,区别于ArrayList,除了实现List接口,还实现了Deque接口。

​LinkedList实现类:

    实现的接口:

        List接口----------------------------------->Collection

        Deque(双端队列)接口----->Queue(队列)接口------>Collection

模拟栈的结构:后进先出(LIFO),栈顶元素,

    push(),压栈,入栈,pop(),弹栈,出栈

模拟队列的结构:先进先出(FIFO),队头元素

    offer(),poll()

【扩展知识1】

数据结构:存储的数据的组织特点。

线性表,链表,树

栈:Stack,这种数据结构的特点

last In First Out,简称LIFO,后进先出。

队列:queue,

First in First out,简称FIFO,先进先出。

【扩展知识2】

Vector:向量

对比ArrayList,LinkedList,Vector实现类

A:ArrayList,底层采用数组结构的实现的。(内存中连续空间)。jdk1.2

    只实现了List接口,功能都是List接口中规定的。

    优缺点:

        优点:遍历访问元素,效率很高

        缺点:插入或删除元素,效率相对低。

B:LinkedList,底层采用双向链表结构实现的。(元素在内存中不挨着,元素之间的指向)。jdk1.2

    实现了List接口的同时,还实现了Deque接口,所以有这两个接口中的功能。

    优缺点:

        优点:插入或删除元素,效率很高。

        缺点:遍历访问元素,效率相对低。

注意点:

    如果一个集合,频繁的添加或删除元素,建议选择LinkedList。

    如果一个集合,绝大多数的操作就是遍历查询,建议选择ArrayList。

    如果要模拟栈,队列等结构,建议选择LinkedList。

C:Vector,是ArrayList的前身。也是数组的结构。古老的类。从jdk1.0的版本就有了。

    线程安全,效率低,后来被ArrayList替代了。

    ArrayList和LinkedList都是线程不安全的,效率高。Collections工具类,可以获取线程安全的集合。

上一篇下一篇

猜你喜欢

热点阅读