目录
一、Iterable
二、Collection(集合、容器)
1.介绍
2.方法
3.总结
三、List 线性结构
1.介绍
2.方法
3.总结
四、举例
Iterable 具备迭代的能力 -able:具备某种能力 Iterate:迭代(遍历) Iterator:迭代器(用来迭代对象)
public interface Iterable
Iterator
default void forEach(Consumer super T>action){ ... }
default Spliterator
}
1.是一个泛型接口
2.T:被迭代(遍历)的元素类型
public interface Iterable
使用:
ArrayList list = new ArrayList<>();
list.add("Hello");
list.add("World");
Iterator it = list.iterator(); //使用it 指向的Iterator 对象,进行迭代(遍历)
线性表是一种Collection,非线性表也是一种Collection。Collection 不具备线性结构的特点,所有Collection 都具备迭代能力 ,Collection 接口 继承自 Iterable 接口
1.int size(); 返回容器中元素的个数
2.boolean isEmpty(); 容器是不是空的 size() == 0
容器是null:口袋都没有;容器是 empty:口袋有,但是口袋中没有东西。
3.boolean contains(Object o); contains包含:容器中,是否存在 o 元素
隐含着,需要遍历容器中所有的元素,和 o 元素进行相等性比较,意味着,会调用 equals 方法,所以。如果想让 contains 正确的返回,必须正确的重写元素的 equals 方法。
4.boolean add(E e); 把元素 e 放入容器中
由于容器不一定是线性结构,所以放入可能会失败。比如,容器中不允许出现相同的元素,当场时放入重复元素时,就会放入失败。返回 ture :放入成功;返回 false :放入失败。注意:无法明确放入是具体的放入了哪个位置。
5.boolean remove(Object o); 将容器中和 o 相等的其中一个元素删除掉
相等性,意味着equals,只删除一个但不保证是哪一个。
6.boolean addAll(Collection c) 将 c 容器中的所有元素,都放入到当前容器中
元素之间是没有顺序的。
7.void clear(); 清空容器中的所有元素
方法 | 介绍 |
int size(); | 返回容器中元素的个数 |
boolean isEmpty(); | 容器是不是空的 size() == 0 |
boolean contains(Object o); | 容器中,是否存在 o 元素 |
boolean add(E e); | 把元素 e 放入容器中 |
boolean remove(Object o); | 将容器中和 o 相等的其中一个元素删除掉 |
boolean addAll(Collection c) | 将 c 容器中的所有元素,都放入到当前容器中 |
void clear(); | 清空容器中的所有元素 |
线性结构:元素有顺序了,有前后关系,有第一个、第二个、最后一个位置概念出现了,头插、尾插、头删、尾删,可以排序。List 继承自 Collection 所以List 具备迭代能力,具备装元素的能力。
线性表:属于逻辑结构中的线性结构,它包括顺序表和链表。
顺序表:逻辑上相邻的数据元素,物理存储位置也相邻;存储空间需要预先分配。顺序存储结构是一种随机存取的存储结构。
链表:逻辑上相邻的数据元素,物理存储位置不一定相邻。存储空间可以动态分配,缺点:要额外占用存储空间存储元素之间的关系。链式存储结构是一种顺序存取的存储结构。
1.boolean add(E e); 对应尾插操作
对于线性结构来说,尾插是不可能失败的(内存不够用不在讨论范围之内),返回值永远是 true 。为什么定义成 void 呢?因为Java 的方法重写规则(不能改变方法签名)。
2.void add(int index,E element); 将元素插入到给定位置
从【index,size()】所有元素逻辑上后移一位,index的合法范围【0,size()】。
3.boolean remove(Object o); 删除第一个遇到的和 o 相等的元素
equals:相等,返回值代表是否删除成功
4.E remove(int index); 将【index】位置的元素从线性结构中取出并返回
让【index + 1,size()】的所有元素,逻辑上前移一个位置,index的合法下标【0,size())。
5.boolean addAll(Collection c); 将c 容器中的所有元素(按照一定的次序),尾插
这个次序目前不确定,永远返回true。
6. void sort(Comparator
调用完成之后,list 变成“有序的 via Comparator c”
7.E get(int index); 返回index 位置的元素
index的合法范围【0,size())。
8.E set(int index,E element); 用element 替换 index 位置的元素,并返回 index 位置原来的元素
index的合法下标【0,size())。
9.int indexOf(E e); 从前往后,第一个和 e 相等的元素所在位置
10.int lastIndexOf(E e); 从后往前,最后一个和 e 相等的元素所在的位置
11.List
方法 | 介绍 | |
boolean add(E e); | 对应尾插操作 | |
void add(int index,E element); | 将元素插入到给定位置 | |
boolean remove(Object o); | 删除第一个遇到的和 o 相等的元素 | |
E remove(int index); | 将【index】位置的元素从线性结构中取出并返回 | |
boolean addAll(Collection c); | 将c 容器中的所有元素(按照一定的次序),尾插 | |
void sort(Comparator |
以c 作为元素的比较器,衡量元素大小进行原地排序 | |
E get(int index); | 返回index 位置的元素 | |
E set(int index,E element); | 用element 替换 index 位置的元素,并返回 index 位置原来的元素 | |
int indexOf(E e); | 从前往后,第一个和 e 相等的元素所在位置 | |
int lastIndexOf(E e); | 从后往前,最后一个和 e 相等的元素所在的位置 | |
List |
将原有线性结构的【fromIndex,toIndex)截取 |
以ArrayList 为例,观察上述方法的使用:
ArrayList
List
new ArrayList<>() 构造普通顺序表,容量采用默认值
newArrayList<>(int capacity); 以capacity 作为初始容量,构造顺序表
newArrayList<>(Collection c); 以 c 中的所有元素作为当前顺序表中的元素构造顺序表,等价于 newArrayList<>(); list.addALL(c);