1.1List接口概述
List接口特征:
1.数据存储可重复
2有序,添加顺序和保存顺序一致
----| ArrayList
可变长数组
-----| LinkedList
双向链表
---------| Vector
线程安全的可变长数组
1.2List常用方法
增
boolean add(E e);
List接口继承Collection接口 add方法,使用操作和Collection一致,并且这里采用的添加方式是【尾插法】
boolean add(int index ,E e);
List接口【特有方法】,在指定位置,添加指定元素
boolean addAll(Collection extends E > c);
List接口继承Collection接口 addAll方法,使用操作和Collection一致,并且这里采用的添加方式是【尾插法】
boolean addAll( int index ,Collection extends E > c);
List 接口【特有方法】,指定下标位置,添加另一个集合中所有内容
删
E remove(int index);
List接口【特有·方法】,获取指定下标位置的元素
boolean remove (Object obj);
List 接口继承Collection接口方法,删除集合中的指定元素
boolean removeAll(Collection> c);
List接口继承Collection接口方法。删除当前集合中和参数集合重复元素
clear();
List 接口继承Collection几口方法。清空整个集合中的所有元素
改
E set(int index,E e);
List接口【特有方法】,使用指定元素替代指定下标的元素,返回值是被替换的元素
查
int size ();
List 接口继承Collection接口方法。获取集合中有效元素个数
boolean isEmpty();
List接口继承Collection接口方法判断当前集合是否为空
boolean contains(Object obj);
List接口继承Collection接口方法,判断指定元素是否包含在当前集合中
boolean containsAll(Collection> c);
List接口继承Collection接口方法,判断参数集合是不是在当前集合的子集合
Object[] toArray();
List接口继承Collection接口方法。获取当前集合中所有元素Object数组
E get (int index);
List接口【特有方法】。获取指定下标对应的元素
List
List接口【特有方法】。获取当前集合指定子集合,从fromIndex开始到toIndex结束,
fromIndex <= 范围 < toIndex
int indexOf(Object obj);
List接口【特有方法】。获取指定元素在集合中低依次出现的位置
int lastIndexOf(Object obj);
List接口【特有方法】。获取指定元素在集合中最后一次出现的位置
2.3List接口常用方法演示
package com.qfen.rxs;
import java.util.ArrayList;
import java.util.List;
public class Demo4 {
private void main() {
// TODO Auto-generated method stub
List
list.add("wqe1");
list.add("121424");
list.add("wweqeq1");
list.add("1dad24");
System.out.println(list);
list.add(3, "1edqrdwf");
System.out.println(list);
List
list2.add("1111");
list2.add("1211");
list2.add("1311");
list2.add("1411");
list.addAll(4,list);
System.out.println(list);
String remove = list.remove(1);
System.out.println(remove);
System.out.println(list);
list.removeIf((str) -> str.length() > 4);
System.out.println(list);
}
}
3ArrayList【重点】
3.1ArrayList概述
ArrayList是在java中集合非常重要的一个组装,基于数组完成的数据结构。课变长数组操作!!!
底层保存数据的是一个Object类型数组
ArrayList使用的方法都是List接口中的方法,有两需要了解的成员方法
ensureCapacity();
判断方法用于确定当前底层数组的容量是否满足当前操作需求
trimToSize();
节省空间将底层数组的容量缩容致有效元素个数’
3.2细节问题
1. DEFAULT_CAPACITY 默认容量 private static final int DEFAULT_CAPACITY = 10;
在调用ArrayList无参数构造方法是,才会使用 DEFAULT_CAPACITY,作为底层Object数组的初始化容量。如果用 户指定调用的是带有初始化底层Object数组容量的构造方法,会根 据用户指定的容量创建对一个ArrayList集合。
2为什么 - 8??? 因为在数组中存在很多属性,length只是众多属性中的一 个,在创建数组使用的过程中,需要留有内存空间用于保存数组中属性。
3.3效率问题
ArrayList特征:
增删慢
增加慢
1. 数组当前容量无法满足添加操作,需要进行grow 扩容方法执行,在扩容方 法中,存在数组创建,数组数据拷贝。非常浪费时 间,而且浪费内存。
2. 数组在添加数据的过程中,存在在指定位置添加 元素,从指定位置开始, 之后的元素整体向后移动。
删除慢
1. 删除数据之后,从删除位置开始,之后的元素整 体向前移动,移动过程非 常浪费时间
2. 删除操作会导致数据空间的浪费,内存的浪费
查询快
ArrayList底层是一个数组结构,在查询操作的过程中, 是按照数组+下标的方式 来操作对应的元素,数组+下标方式可以直接获取对应的空 间首地址,CPU访问效率 极高
3.4【补充知识点,内存地址】
内存地址概念: [计算机原理] 计算机中为了更好的使用内存,操作程序,完成代码。将内存按 照小单位,进行编号处理。 小单位: 字节 byte 从编号为0内存开始,到内存的大值。地址的展示方式是十六 进制。
3.5【补充 内存地址对于cpu有什么关系】
快递小哥我们可以看做是CPU,快递上地址,就是内存地址,具 有唯一性!!!
代码实际运行: CPU就是根据内存地址,可以直达内存所在区域,执行对应代 码。精准而优雅,速度非常快!!
3.6【补充 数组空间地址关系】
3.7【补充 null是什么】
null 是计算机中非常特殊的一块内存。该内存编号 0x0000 0000
该内存受到系统保护
不只是电脑,包括手机,iPad,智能设备,只要存在计算机基 本结构的设备上都存在null 编号为0x0内存。大小一个字节 该内存不能读取任何数据,也不能写入任何数据。一旦操作,程 序直接被系统杀死 Kill -9
一般用于引用数据类型的初始化,利用开发中关于null的异 常,辅助找出代码中的错误。 NullPointerException