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也很多,有点记不住,需要多练习,并且方法回来第一天,状态也不是很好。
评论留言