一.简介
ArrayList支持可随需要而增长的动态数组。在Java数组中,长度是固定的因此在数组被创建后不能修改长度,这意味着开发者需要知道数组的长度。但在一般情况下,只有在运行时才知道长度。为了解决这个问题,ArrayList因此而生
ArrayList:有序有下标 数据可重复,LinkedList:查询慢,删除插入快
二.实现
List lists = new ArrayList();(其中的String可以改为integer,double等类型)
注:ArrayList对象只能存放对象,不能存放基础数据类型的数据。
三.构造函数
ArrayList中定义了三种构造方法
1.ArrayList()----------------构造了空的链表。
2.ArrayList(Collection<? extends E> c)------构造了一个包含指定元素集合的链表,字符E是一个标记,用来表示集合中元素的类型。
3.ArrayList(int initialCapacity)---------构造了一个大小确定但内容为空的链表。initialCapacity参数表示初始容量大小。
ArrayList遍历方式
ArrayList
有三种遍历方式
迭代器遍历
Iterator i = arrayList.iterator();
while(it.hasNext()){
System.out.print(i.next() + " ");
}
索引值遍历
for(int i = 0; i < arrayList.size(); i++){
System.out.print(arrayList.get(i) + " ");
}
for循环遍历
for(Integer number : arrayList){
System.out.print(number + " ");
}
我们可以通过运行代码,来了解ArrayList的用法
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class testList {
public static void main(String[] args) {
/**
* ArrayList:有序有下标 数据可重复
* LinkedList:查询慢,删除插入快
*/
List list=new ArrayList<>();
一,增
1.
/**
* .add()
* 添加数据,将指定的元素追加到此列表的末尾
*/
list.add("张四");
list.add(10);
list.add(3.14);
list.add('女');
张三
10
3.14
女
2.
/**
* .add(int index,E element)
* 在此列表中的指定位置插入指定的元素
*/
list.add(0, "帅哥");
帅哥
张三
10
3.14
女
3.
/**
* .addAll(Collection<? extends E> c)
* 按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾
*/
list.addAll(list);
4.
/**
* .addAll(int index,Collection<? extends E> c)
* 将指定集合中的所有元素插入到此列表中,从指定的位置开始。
*/
list.addAll(0, list);
二,删
1.
/**
* .clear()
* 从列表中删除所有元素
*/
list.clear();
2.
/**
* .remove(值) 根据值进行删除 返回一个Boolean值
*/
list.remove(3.14);
帅哥
张三
10
女
3.
/**
* .remove(index) 根据下表进行删除
*/
list.remove(5);
4.
5.
三,改
1.
/**
* .set(index,值) 在指定下标的地方添加值
*/
list.set(1, "李四");
帅哥
李四
张三
10
女
2.
// 将此 ArrayList 实例的容量调整为列表的当前大小(实际元素个数)
public void trimToSize() {
modCount++;
if (size < elementData.length) {
elementData = Arrays.copyOf(elementData, size);
}
}
四,查
1.
/**
* .size 获取集合长度
*/
int length=list.size();
2.
for(int i=0;i<length;i++) {
/**
* .get(index) 利用下标获取结合的值
*/
Object o=list.get(i);
System.out.println(o+"");
}
3.
// 返回ArrayList中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
// 返回ArrayList中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1
public int lastIndexOf(Object o) {
if (o == null) {
for (int i = size-1; i >= 0; i--)
if (elementData[i]==null)
return i;
} else {
for (int i = size-1; i >= 0; i--)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
System.out.println("--------第二种--for增强版----------");
/**
* 增强版的for循环
* for(数据类型 对象名:集合名){}----集合中的每一个值都循环赋值给前面的对象
* 相当于Object o=list.get(i);
*/
for(Object o :list) {
System.out.println(o+" ");
}
4.
System.out.println("--------第三种--迭代循环----------");
/**
* .iterator() 获取集合的迭代器
*/
Iterator iterator=list.iterator();
5.
list.isEmpty()
6.
list.contains("张三")
五,toArray()的使用
// toArray用法
// 第一种方式(最常用)
Integer[] integer = list.toArray(new Integer[0]);
// 第二种方式(容易理解)
Integer[] integer1 = new Integer[list.size()];
arrayList.toArray(integer1);
// 抛出异常,java不支持向下转型
//Integer[] integer2 = new Integer[list.size()];
//integer2 = arrayList.toArray();
六,
返回指定的fromIndex (含)和toIndex之间的列表部分的视图。(如果fromIndex和toIndex相等,返回的列表为空。)返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然。返回的列表支持所有可选列表操作。
该方法消除了对显式范围操作(对于数组通常存在的排序)的需要。 任何期望列表的操作都可以通过传递一个子列表视图而不是整个列表来用作范围操作。 例如,以下成语从列表中移除了一系列元素:
list.subList(from, to).clear();
可以为indexOf(Object)和lastIndexOf(Object)构造类似的成语,并且Collections类中的所有算法都可以应用于子列表 。
如果支持列表(即,此列表)以除了通过返回的列表之外的任何方式进行结构修改 ,则此方法返回的列表的语义将变得未定义。 (结构修改是那些改变此列表的大小,或以其他方式扰乱它,使得正在进行的迭代可能产生不正确的结果)。
Specified by:
subList在接口 List
重写:
subList在 AbstractList
参数
fromIndex - fromIndex低端点(含)
toIndex - toIndex高端点(独占)
结果
该列表中指定范围的视图
异常
IndexOutOfBoundsException - 如果端点索引值超出范围 (fromIndex < 0 || toIndex > size)
IllegalArgumentException - 如果端点索引是乱序 (fromIndex > toIndex)
在此列表中的元素上创建late-binding和fail-fast Spliterator 。
该Spliterator报告Spliterator.SIZED , Spliterator.SUBSIZED和Spliterator.ORDERED 。 覆盖实现应记录其他特征值的报告。
Specified by:
spliterator在接口 Iterable
Specified by:
spliterator中的 Collection
Specified by:
spliterator在界面 List
结果
一个 Spliterator在这个列表中的元素
从以下版本开始:
1.8
说明从界面复制: List
使用提供的 Comparator对此列表进行排序,以比较元素。
Specified by:
sort在界面 List
参数
c - 用于比较列表元素的Comparator 。 null值表示应使用元素’ natural ordering ’