List
有序集合,可以精确控制列表中每个元素的插入位置。通过整数索引获取列表中的元素。List允许出现重复的值 , 并可以精确控制列表中每个元素的插入位置,通过整数索引获取列表中的元素。
方法名 | 说明 |
---|---|
add(E e) | 增加单个数据 |
addAll(Collection<? extends E> c) | 将一个 Collection 集合的数据添加到现在的集合中 |
remove(Object o) | 删除指定的元素 |
contains(Object o) | 判断集合是否包含指定的元素 |
size() | 得到集合的数据总数 |
isEmpty() | 判断集合是否有数据 |
get(int index) | 通过索引获取对应的数据元素 |
set(int index, E element) | 通过索引和新的元素替换原有内容 |
clear() | 清空数据 |
toArray() | 将List转为对象数组 |
ArrayList
ArrayList 是List 接口的大小可变数组的实现。实现了所有可选列表操作, 并允许包括null 在内的所有元素。除了实现List 接口外, 此类还提供一些方法来操作内部用来存储列表的数组的大小( 此类大致上等同于 vector 类, 但 vector 是同步的) 。
ArrayList 的底层是使用数组实现的,看下面的图
可以看到,数组中的每一个元素,都存储在内存单元中,并且元素之间紧密排列,既不能打乱元素的存储顺序,也不能跳过某个存储单元进行存储。
ArrayList 底层既然是使用数组实现,那么特点就和数组一致:查询速度快,增删速度慢
每个ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小, 它总是至少等于列表的大小。随着向Array L ist 中小断添加元素, 其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。我们可以使用默认构造函数创建容量为 10 的列表, 也可以初始化指定容量大小。
ArrayList 指定初始容量大小的构造器方法
public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
this.elementData = EMPTY_ELEMENTDATA;
} else {
throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);
}
}
常用的操作
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
// 添加数据
list.add(123);
list.add(346);
// 替换数据
list.set(1, 777);
// 将list中的所有数据放到 list2 中
List<Integer> list2 = new ArrayList<>();
list2.addAll( list );
// 循环list2中所有的数据
for (Integer integer : list2) {
System.out.println( integer );
// 删除循环出的对象
list2.remove(integer);
}
// list 集合是否有数据
if( !list.isEmpty() ) {
System.out.println("list.size = "+ list.size());
// 清空 list
list.clear();
}
// 在清空list后,再看list现在有多少数据
System.out.println("list.size = "+ list.size());
}