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[] | 
返回一个包含此集合中所有元素的数组 | 
实现类很多,主要研究List 、Set 、Queue
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 的,所以不做单独说明。 
常用子类, HashSet 和 TreeSet
1.2.3 List
public interface List<E> extends Collection<E>
有序集合(也称为序列 )。 该集合用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数 索引(列表中的位置)访问元素,并搜索列表中的元素
List 通常允许重复的元素、允许 null元素
List在 JDK 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 之间的元素集合 | 
主要子类, ArrayList 、 LinkedList 、 Vector
1.2.3.1 Vector
Vector 类实现了可扩展的对象数组。 像数组一样,它包含可以使用整数索引访问的组件。 但是, Vector的大小可以变化。
Vector 是同步的,是线程安全的。
Vector 继承了 AbstractList 类,实现了 List 接口
默认大小是10,当容量不足时,默认扩容方式是按倍增长
子类, Stack

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
ArrayList 是 AbstractList类的子类,同时实现了 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也很多,有点记不住,需要多练习,并且方法回来第一天,状态也不是很好。


评论留言