了解其他JAVA 常用API和算法点这里 >> https://blog.csdn.net/GD_ONE/article/details/104061907
摘要:
本文主要介绍ArrayList和LinkedList的常用方法, 也就是动态数组(C++中的vector)和链表,其中LinkedList可以用来实现队列和栈(C++中的queue和stack)。
ArrayList
ArrayList 类可以实现可增长的对象数组。
构造方法
ArrayList()
;//构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。
ArrayList(int initialCapacity)
;//使用指定的初始容量和容量增量构造一个空的向量。
增加元素
add(E e)
;//将指定元素添加到末尾
add(int index, E element)
//在此向量的指定位置插入指定的元素
删除元素
remove(int index)
;//移除此向量中指定位置的元素
clear()
;//从此向量中移除所有元素。
修改元素
set(int index, E element)
;//用指定的元素替换此向量中指定位置处的元素
查找元素
get(int index)
//返回向量中指定位置的元素
indexOf(Object o)
//返回此向量中第一次出现的指定元素的索引,如果此向量不包含该元素,则返回 -1。
lastIndexOf(Object o)
返回此向量中最后一次出现的指定元素的索引;如果此向量不包含该元素,则返回 -1。
容器大小
size()
;//返回此向量中的组件数。
判空
isEmpty()
;//测试此向量是否不包含组件
转化为数组
toArray()
;//返回一个数组,包含此向量中以恰当顺序存放的所有元素。
转化为字符串
toString()
;//返回此向量的字符串表示形式,其中包含每个元素的 String 表示形式。
拷贝
- 使用等号拷贝
ArrayList<Integer> Arr1 = new ArrayList<>(); ArrayList<Integer> Arr2 = new ArrayList<>(); // 将Arr2的值拷贝给Arr1 Arr1 = Arr2; // Arr1之前的值会自动被垃圾回收
以下两种方式也适用于其他集合的拷贝
-
使用构造函数拷贝
只要该集合的构造函数支持参数为集合就可以使用此方法拷贝ArrayList<Integer> Arr2 = new ArrayList<>(); // 将Arr2的值拷贝给Arr1 ArrayList<Integer> Arr1 = new ArrayList<>(Arr2);
-
clone()
只要该集合支持clone,就可以使用此方法拷贝ArrayList<Integer> Arr1 = new ArrayList<>(); ArrayList<Integer> Arr2 = new ArrayList<>(); // 将Arr2的值拷贝给Arr1 Arr1 = (ArrayList<Integer>) Arr2.clone();
实例
ArrayList<Integer> V = new ArrayList<>();
V.add(1);
V.add(1);
V.set(0, 0);
System.out.print(V.toString());
输出:
[0, 1]
LinkedList
LinkedList是List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。
add(E e)
//在末尾添加一个元素addFirst(E e)
//在开头添加一个元素addLast(E e)
//在末尾添加一个元素offer(E e)
//将指定元素添加到此列表的末尾(最后一个元素)clear()
//从此列表中移除所有元素element()
获取但不移除此列表的头(第一个元素)。peek()
//获取但不移除此列表的头(第一个元素)。poll()
//获取并移除此列表的头(第一个元素)getFirst()
返回此列表的第一个元素。getLast()
返回此列表的最后一个元素indexOf(Object o)
返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。lastIndexOf(Object o)
返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。pop()
从此列表所表示的堆栈处弹出一个元素。push(E e)
将元素推入此列表所表示的堆栈。remove()
获取并移除此列表的头(第一个元素)。remove(int index)
移除此列表中指定位置处的元素size()
//返回元素个数
大体上来说LinkedList和ArrayList的方法用法都一样,无非是get,set等方法,不过LinkedList可以用作栈和队列(链表实现),因为它包含了(
push,pop)栈的进出,(offer,poll)队列的进出等方法。
ArrayList的遍历
- 通过迭代器
Iterator iterator=students.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
- for循环和get方法
for(int i = 0; i < n; i++)
System.out.println(E.get(i))
- for each
for(int x : E){ //构造容器时用的什么类型,就定义什么类型。
System.out.println(x);
}
stack和queue
上面已经说过,LinkedList可以用来实现栈和队列。
在JAVA中Stack也有专门的类,是通过Vector实现的。
实例:
Stack<Integer> Stack = new Stack<>(); //第一种栈的实现方式
LinkedList<Integer> Stack = new LinkedList<>(); // LinkedList没有实现Stack接口,但是我们只需要用其中的关于栈的方法。
Queue<Integer> Queue = new LinkedList<>();//LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。
在使用这些容器类的时候,我们不需要背会其所有的方法,只需要知道一个大概就行了,忘记了可以查。