由于经常用的List实现的类来对数组进行处理,所以今天看一下,做一下总结。
List
一共有三个类实现了Collection,他们分别是***List,Set和Queue***。Java的List是非常常用的数据类型。List是有序的Collection。Java List一共三个实现类:分别是ArrayList、Vector和LinkedList。
1 ArrayList(数组)
https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
内部实现了一个顺序数组。
构造方法
ArrayList(Collection<? extends E> c) | 用一个实现了Collection接口的类初始化 |
---|---|
ArrayList() | 构造一个空的长度为10的数组 |
ArrayList(int initialCapacity ) | 构造一个空的指定长度的数组 |
常用方法
boolean add(E e) | 在列表尾部添加元素e |
---|---|
void add(int index,E element) | 在位置index处添加元素e |
void addAll(Collection<? extends E> c) | 在列表尾部添加Collection c中的所有元素 |
void addAll(int index,Collection<? extends E> c) | 在位置index处添加Collection c中的所有元素 |
void clear() | 清除列表中的所有元素 |
Object clone() | 返回一个ArrayList实例的浅复制 |
boolean contains(Object o) | 如果列表中包含Object o则返回true |
void forEach(Consumer<? super E> action) | 一种新的遍历方式,可用lambda表达式处理 |
E get(int index) | 返回位置index的元素 |
int indexOf(Object o) | 返回Object o第一次出现的位置 |
boolean isEmpty() | 如果列表是空列表则返回true |
int lastIndexOf(Object o) | 返回Object o最后一次出现的位置 |
E remove(int index) | 删除位置index的元素 |
boolean remove(Object o) | 删除第一次出现的Object o |
boolean removeAll(Collection<?> c) | 在列表中删除Collection c包含的所有元素 |
void removeRange(int fromIndex,int toIndex) | 删除在fromIndex到toIndex-1上的所有元素 |
E set(int index, E element) | 将位置index上的元素换为E |
int size() | 返回列表中的元素个数 |
void sort(Comparator<? super E> c) | 根据c的规则对列表进行排序 |
Object[] toArray() | 返回一个包含列表中所有元素的原始数组 |
T[] toArray (T[] a) | 返回参数指定的类型 |
需要注意的地方
- toArray方法
实际上常用的方法应该是第二个( T[] toArray(T[] a)),第一个方法常常会出现错误,比如下面这个栗子:
ArrayList<String> list=new ArrayList<String>();
for (int i = 0; i < 10; i++) {
list.add(""+i);
}
String[] array= (String[]) list.toArray();
由于Java中的强制类型转换只是针对单个对象的,将整个数组转换成另外一种类型的数组是不行的,用第二种方法改写如下;
ArrayList<String> list=new ArrayList<String>();
for (int i = 0; i < 10; i++) {
list.add(""+i);
}
String array = list.toArray(new String[list.size()]);
- remove方法
remove方法在删除掉元素后,会将被删元素后面的所有元素前移一个单位,因此在循环中要将计数器减一,以免漏掉元素。例如需要在列表中删除特定元素“bad”:
List<> arr = new ArrayList<String>();
arr.add("good");
arr.add("good");
arr.add("medium");
arr.add("bad");
arr.add("good");
arr.add("bad");
arr.add("good");
for(int i=0;i<arr.size();i++){
if(arr.get(i).equals("bad"){
arr.remove(i);
i--;
}
}
2 LinkedList
https://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/LinkedList.html
内部实现了一个双向链表。
构造方法
AlinkedList() | 构造一个空链表 |
---|---|
LinkedList(Collection<? extends E> c) | 用一个实现了Collection接口的类初始化 |
常用方法
大部分方法都与ArrayList相同,功能用法也类似,下面说一下LinkedList特殊的方法
boolean addFirst(E e) | 将指定元素添加到此列表的开头 |
---|---|
boolean addLast(E e) | 将制定元素添加到此列表的结尾 |
E element() | 获取但不移除此列表的头 |
E getFirst() | 返回此列表的第一个元素 |
E getLast() | 返回此列表的最后一个元素 |
E peek() | 获取但不移除此列表的头 |
E peekFirst() | 获取但不移除此列表的头 |
E peekLast() | 获取但不移除此列表的最后一个元素 |
E poll() | 获取并移除此列表的第一个头(作为队列用方法) |
E pollFirst() | 获取并移除此列表的第一个元素 |
E pollLast() | 获取并移除此列表的最后一个元素 |
E pop() | 注意:和poll()的作用一样 |
E push() | 将元素推入此列表所表示的堆栈 |