一、重点知识
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工具类,可以获取线程安全的集合。
网友评论