20201007 王维

学习总结

1.集合

java 中针对数组的缺陷,提供了一种比数组灵活、使用方便的接口和类,它们位于 java.util包,称 为集合框架。

Java集合框架:①java.lang.Iterable<T>Collertion<E>Map

1.1 java.lang.Iterable

Iterable 接口,凡是实现了此接口的对象都能称为 for-each-loop 的目标。

for(数据类型 变量名 : 循环对象){
    //循环体
}
//变量是循环对对象的值,不是索引

iterator()方法返回一个iterator类型的迭代器。

1.2 java.util.Collection

public interface Collection<E>
extends Iterable<E>

从类的声明我们可以看到, Collection 接口继承了 Iterable 接口。也就意味着,实现了Collection接口的类也间接实现了 Iterable 接口,也就是说它们都能作为 for-each-loop 的循环对象。

Collection 是集合层次结构中的根接口。集合表示一组对象,对象称为其元素。有些集合允许重复元素,有些则不允许。 有些是有序的,有些是无序的

抽象方法

方法名 返回值 描述
add(E e) boolean 添加元素
addAll(Collection<? extends E> c) boolean 将集合中的所有元素添加此集合中
clear() void 清除所有元素
contains(Object o) boolean 集合中是否包含此元素
containsAll(Collection<?> c) boolean 集合中是否包含 c 集合中的所有元素
isEmpty() boolean 集合中是否有元素,如果没有返回 true
iterator() Iterator<E> 继承自 Iterable 接口,返回集合的迭代器
remove(Object o) boolean 删除集合中的某个元素
removeAll(Collection<?> c) boolean 删除集合 c 中包含的所有元素
size() int 返回此集合中的元素数
toArray() Object[] 返回一个包含此集合中所有元素的数组

实现类很多,主要研究ListSetQueue

1.2.1Queue (队列)

public interface Queue<E>
extends Collection<E>

设计用于在处理之前保留元素的集合。 除了基本的Collection 操作之外,队列还提供额外的插入,提取和检查操作。

不可以存 null

主要抽象方法

方法名 返回值 描述
peek() E 检索不删除此队列的头,如果此队列为空,则返回 null ,如果不为空返 回队列的头
poll() E 检索并删除此队列的头,如果此队列为空,则返回 null
remove() E 检索并删除此队列的头。 此方法与 poll 不同之处在于,如果此队列为 空,它将抛出异常。
1.2.1.1 Deque(双端队列)
public interface Deque<E>
extends Queue<E>

继承了 Queue ,支持两端元素插入和移除的线性集合。

常用抽象方法

方法名 返回值 描述
addFirst(E e) void 插入此双端队列的前面
addLast(E e) void 双端队列的末尾插入元素,和add(E e)类似
getFirst() E 检索,但不删除,第一个元素
getLast() E 检索,但不删除,最后一个元素
pop() E 删除并返回此deque的第一个元素
push(E e) void 相当于 addFirst(E)

1.2.2 Set

public interface Set<E>
extends Collection<E>

不包含重复元素的集合。

抽象方法大多是继承自 Collection 的,所以不做单独说明。

常用子类, HashSetTreeSet

1.2.3 List

public interface List<E> extends Collection<E>

有序集合(也称为序列 )。 该集合用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数 索引(列表中的位置)访问元素,并搜索列表中的元素

List 通常允许重复的元素、允许 null元素

ListJDK 9中新增 of()方法,作用是返回一个 List对象。 of(E...e)可以接受传参,但是不能 传 null。否则会抛出 NullPointerException

抽象方法

方法名 返回值 描述
add(int index, E element) void 将指定的元素插入此列表中的指定位置
addAll(int index,Collection<? extends E> c) boolean 将指定集合中的所有元素插入到此列表中的指 定位置
get(int index) E 返回此列表中指定位置的元素
indexOf(Object o) int 返回此列表中指定元素的第一次出现的索引, 如果此列表不包含元素,则返回-1
lastIndexOf(Object o) int 返回此列表中指定元素的最后一次出现的索 引,如果此列表不包含元素,则返回-1
remove(int index) E 删除该列表中指定位置的元素,返回被删除的 元素
remove(Object o) boolean 从列表中删除指定元素的第一个出现(如果存在)
set(int index, E element) E 用指定的元素(可选操作)替换此列表中指定 位置的元素,返回被替换的值
subList(int fromIndex, int toIndex) List 返回此列表中指定的 fromIndex (含)和 toIndex 之间的元素集合

主要子类, ArrayListLinkedListVector

1.2.3.1 Vector

Vector 类实现了可扩展的对象数组。 像数组一样,它包含可以使用整数索引访问的组件。 但是, Vector的大小可以变化。

Vector 是同步的,是线程安全的。

Vector 继承了 AbstractList 类,实现了 List 接口

默认大小是10,当容量不足时,默认扩容方式是按倍增长

子类, Stack

image-20201007224225060

1.2.3.1.1 Stack

Stack 类代表后进先出(LIFO last-in first-out )堆栈的对象, Stack 继承自 Vector 所以它有所有 Vector 中的方法。

public class Stack<E> extends Vector<E>

常用方法:

方法名 返回值 描述
empty() boolean 此堆栈是否为空
peek() E 返回此堆栈顶部的对象,而不从堆栈中删除它
pop() E 返回并删除此堆栈顶部的对象
push (E item) E 将 item 添加到堆栈的顶部
1.2.3.2 ArrayList

ArrayListAbstractList类的子类,同时实现了 List 接口。

ArrayList 不是同步的,也就是说是非线程安全的。

ArrayList 内部是使用数组存储数据,也就是说在内存中开辟一个连续的空间。是一个可变的数组, 可以向 ArrayList 中添加不同类型数据,这些数据都将转换 Object 类型存储。

初始化容量是 10 ,存储数据的对象是 Object[] elementData ,当容量不足时,扩容1.5倍

ArrayList中的方法中大部分方法都是实现自 List 接口。

方法名 返回值 描述
add(int index, E element) void 将指定的元素插入此列表中的指定位置
addAll(int index,Collection<? extends E> c) boolean 将指定集合中的所有元素插入到此列表中的指 定位置
get(int index) E 返回此列表中指定位置的元素
indexOf(Object o) int 返回此列表中指定元素的第一次出现的索引, 如果此列表不包含元素,则返回-1
lastIndexOf(Object o) int 返回此列表中指定元素的最后一次出现的索 引,如果此列表不包含元素,则返回-1
remove(int index) boolean 从列表中删除指定元素的第一个出现(如果存 在)
remove(Object o) boolean 删除该列表中指定位置的元素,返回被删除的 元素
set(int index, E element) E 用指定的元素(可选操作)替换此列表中指定 位置的元素,返回被替换的值
subList(int fromIndex, int toIndex) List 返回此列表中指定的 fromIndex (含)和 toIndex 之间的元素集合

注意: contains 方法在判断对象时,对象的类中要重写 equals 方法。因为他是调用对象的equals方法

Arrays.asList() 方法返回一个只读集合

不要再使用foreach遍历时改变ArraList的长度(增加或删除元素),否则会报错,如果非要在遍历时改变长度,则使用迭代器。

心得体会

今天学习了集合,集合的元素的指针指过来值过去,有点昏,包含的API也很多,有点记不住,需要多练习,并且方法回来第一天,状态也不是很好。

标签

评论

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1