Java基礎學習筆記(十四)—— java中的常用容器ArrayList與LinkedList
People can't do something by themselves; they wanna tell you you can not do it.
| @Author:TTODS
目錄
- Java基礎學習筆記(十四)—— java中的常用容器ArrayList與LinkedList
- ArrayList與LinkedList
- ArrayList常用方法
- 構造方法
- 操作元素
- add(E e)
- add(int index, E element)
- addAll(Collection<? extends E> c)
- addAll(int index, Collection<? extends E> c)
- clear()
- clone()
- remove(int index)
- remove(Object o)
- removeAll(Collection<?> c)
- removeRange(int fromIndex, int toIndex)
- retainAll(Collection<?> c)
- set(int index, E element)
- sort(Comparator<? super E> c)
- subList(int fromIndex, int toIndex)
- toArray()
- trimToSize()
- 判斷元素
- 查詢元素
- 其他方法
- LinkedList常用方法
- 構造方法
- 操作元素
- add(E e)
- add(int index, E element)
- addAll(Collection<? extends E> c)
- addAll(int index, Collection<? extends E> c)
- addLast(E e)
- addFirst(E e)
- clear()
- clone()
- poll()
- pollFirst()
- pollLast()
- pop()
- push(E e)
- remove()
- remove(int index)
- remove(Object o)
- removeFirst()
- removeLast()
- removeFirstOccurrence(Object o)
- removeLastOccurrence(Object o)
- set(int index, E element)
- toArray()
- offer(E e)
- offerFirst(E e)
- offerLast(E e)
- 判斷元素
- 查詢元素
- element()
- get(int index)
- getFirst()
- getLast()
- indexOf(Object o)
- lastIndexOf(Object o)
- peek()
- peekFirst()
- peekLast()
- 其他方法
ArrayList與LinkedList
Java集合類型分爲:Collection和Map,Collection子接口有:Set、Queue和List等接口。每一種集合接口描述了一種數據結構。
ArrayList與LinkedList 都是List接口的具體實現類,List集合中的元素是有序的,可以重複出現。ArrayList底層使動態數組數據結構,LinkedList底層是鏈表結構。ArrayList訪問元素速度優於LinkedList,LinkedList佔用的內存空間比較大,但LinkedList在批量插入或刪除數據時優於ArrayList。
ArrayList常用方法
構造方法
ArrayList()
構造一個初始容量爲10的空列表
ArrayList myArray = new ArrayList();
ArrayList(Collection<? extends E> c)
用已有容器對象初始化另一個ArrayList對象
ArrayList<Integer> myArray = new ArrayList<>();
myArray.add(1);
myArray.add(2);
myArray.add(3);
ArrayList<Integer> myArray1 = new ArrayList<>(myArray);
System.out.println(myArray1); // [1,2,3]
ArrayList(int initialCapacity)
構造一個初始容量爲initialCapacity
的空列表
操作元素
add(E e)
將一個元素增加到列表尾部
ArrayList<Integer> myArray = new ArrayList<>();
myArray.add(1);
System.out.println(myArray); //[1]
myArray.add(2);
System.out.println(myArray); //[1,2]
myArray.add(3);
System.out.println(myArray); //[1,2,3]
add(int index, E element)
在index處增加一個元素element,其他元素後移一位
addAll(Collection<? extends E> c)
將一個容器裏的元素增加到列表尾部
ArrayList<Integer> myArray = new ArrayList<>();
myArray.add(1);
myArray.add(2);
myArray.add(3);
ArrayList<Integer> myArray1 = new ArrayList<>();
myArray1.add(4);
myArray1.add(5);
myArray1.add(6);
System.out.println(myArray); //[1,2,3]
System.out.println(myArray1);//[4,5,6]
myArray.addAll(myArray1);
System.out.println(myArray);//[1,2,3,4,5,6]
addAll(int index, Collection<? extends E> c)
將一個容器裏的元素增加到列表指定索引處
ArrayList<Integer> myArray = new ArrayList<>();
myArray.add(1);
myArray.add(2);
myArray.add(3);
ArrayList<Integer> myArray1 = new ArrayList<>();
myArray1.add(4);
myArray1.add(5);
myArray1.add(6);
System.out.println(myArray);//[1,2,3]
System.out.println(myArray1);//[4,5,6]
myArray.addAll(0,myArray1);
System.out.println(myArray);//[4,5,6,1,2,3]
clear()
清空列表
ArrayList myArray = new ArrayList();
myArray.add(1);
myArray.add(2);
myArray.add(3);
myArray.clear();
System.out.println(myArray); // []
clone()
返回此ArrayList的淺拷貝
ArrayList<Integer> myArray = new ArrayList<>();
myArray.add(1);
myArray.add(2);
myArray.add(3);
ArrayList<Integer> myArray1 = new ArrayList<>();
myArray1 = (ArrayList<Integer>) myArray.clone();
System.out.println(myArray);//[1,2,3]
System.out.println(myArray1);//[1,2,3]
myArray.add(4);
System.out.println(myArray);//[1,2,3,4]
System.out.println(myArray1);//[1,2,3]
remove(int index)
移除指定索引處的元素
remove(Object o)
移除指定列表中第一個元素o(如果存在)
ArrayList<Integer> myArray = new ArrayList<>();
myArray.add(1); //注意此處進行了自動封箱,int類型的數值 1 自動被轉換成了一個Integer對象
myArray.add(2);
myArray.add(1);
System.out.println(myArray);//[1,2,1]
myArray.remove((Integer)1);// 若寫成 myArray.remove(1); 會調用上一個方法remove索引爲1的元素
System.out.println(myArray);//[2,1]
removeAll(Collection<?> c)
ArrayList<Integer> myArray = new ArrayList<>();
myArray.add(1);
myArray.add(2);
myArray.add(2);
myArray.add(3);
myArray.add(3);
ArrayList<Integer> myArray1 = new ArrayList<>();
myArray1.add(2);
myArray1.add(3);
System.out.println(myArray);//[1,2,2,3,3]
System.out.println(myArray1);//[2,3]
myArray.removeAll(myArray1);
System.out.println(myArray);//[1]
removeRange(int fromIndex, int toIndex)
移除此列表所以區間[fromIndex,toIndex)內的元素,若fromIndex==toIndex,不做改變
retainAll(Collection<?> c)
僅保留此列表中包含在指定集合中的元素,即刪除指定集合中不存在的元素
ArrayList<Integer> myArray = new ArrayList<>();
myArray.add(1);
myArray.add(2);
myArray.add(2);
myArray.add(3);
myArray.add(3);
ArrayList<Integer> myArray1 = new ArrayList<>();
myArray1.add(3);
System.out.println(myArray);//[1,2,2,3,3]
System.out.println(myArray1);//[3]
myArray.retainAll(myArray1);
System.out.println(myArray);//[3,3]
set(int index, E element)
將指定索引處的元素設爲element
ArrayList<Integer> myArray = new ArrayList<>();
myArray.add(1);
myArray.add(2);
myArray.add(2);
myArray.add(3);
myArray.add(3);
System.out.println(myArray);//[1,2,2,3,3]
myArray.set(2, (Integer)100);
System.out.println(myArray);//[1,2,100,3,3]
sort(Comparator<? super E> c)
按提供的Comparator(比較器)排序
ArrayList<Integer> myArray = new ArrayList<>();
myArray.add(5);
myArray.add(4);
myArray.add(3);
myArray.add(2);
myArray.add(1);
System.out.println(myArray);//[5,4,3,2,1]
myArray.sort(null);
System.out.println(myArray);//[1,2,3,4,5]
subList(int fromIndex, int toIndex)
取區間[fromIndex,toIndex)的子列表
toArray()
返回一個包含此列表中所有元素的Object數組(按列表中的順序)
ArrayList<Integer> myArray = new ArrayList<>();
myArray.add(5);
myArray.add(4);
myArray.add(3);
myArray.add(2);
myArray.add(1);
Object[] A = myArray.toArray();
System.out.println(myArray);//[5,4,3,2,1]
for(Object i :A)
System.out.println(i);
/*
5
4
3
2
1
*/
trimToSize()
去除數組多餘的容量,使數組的容量與size()相等。
判斷元素
contains(Object o)
判斷列表是否包含元素o
isEmpty()
判斷列表是否爲空
查詢元素
get(int index)
獲取索引爲index的元素
indexOf(Object o)
獲取列表中第一次出現(索引最小)的元素o的索引
lastIndexOf(Object o)
獲取列表中最後次出現(索引最大)的元素o的索引
其他方法
size()
獲取列表的大小(存有元素的個數)
LinkedList常用方法
構造方法
LinkedList()
構造一個空列表。
LinkedList myLinkedList = new LinkedList();
LinkedList(Collection<? extends E> c)
構造一個包含指定集合的元素的列表,按照它們由集合的迭代器返回的順序。
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList);//[Hello, World, Hello, java]
操作元素
add(E e)
將指定的元素追加到此列表的末尾(可選操作)。返回一個boolean值,表示是否插入成功。
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
if(myLinkedList.add("add String")) {
System.out.println("成功在LinkedList末尾添加元素");
System.out.println(myLinkedList);
}
//成功在LinkedList末尾添加元素
//[Hello, World, Hello, java, add String]
add(int index, E element)
在index處增加一個元素element,其他元素後移一位。無返回值。
addAll(Collection<? extends E> c)
將指定集合中的所有元素插入到此列表中的末尾。返回boolean值。
addAll(int index, Collection<? extends E> c)
將指定集合中的所有元素插入到此列表中,從指定的位置開始。 返回boolean值。
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList); //[Hello, World, Hello, java]
myLinkedList.addAll(2,Arrays.asList("This","is","a","new","List"));
System.out.println(myLinkedList);//[Hello, World, This, is, a, new, List, Hello, java]
addLast(E e)
在該列表末尾插入元素,無返回值。
addFirst(E e)
在該列表開頭插入元素,無返回值。
clear()
清空列表
clone()
返回此ArrayList的淺拷貝,示例見ArrayList的相同方法。
poll()
檢索並刪除此列表的頭(第一個元素)。返回被刪除的元素。若列表本爲空返回null
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList.poll());//Hello
System.out.println(myLinkedList);//[World, Hello, java]
pollFirst()
檢索並刪除此列表的第一個元素,如果此列表爲空,則返回 null 。
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList.pollFirst());//Hello
System.out.println(myLinkedList);//[World, Hello, java]
pollLast()
檢索並刪除此列表的最後一個元素,如果此列表爲空,則返回 null 。
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList.pollLast()); //java
System.out.println(myLinkedList); // [Hello, World, Hello]
pop()
從此列表表示的堆棧中彈出一個元素。(刪除並返回列表的第一個元素)
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList.pop());//Hello
System.out.println(myLinkedList);// [World, Hello, java]
push(E e)
將元素推送到由此列表表示的堆棧上。
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList); //[Hello, World, Hello, java]
myLinkedList.push("String");
System.out.println(myLinkedList);// [String, Hello, World, Hello, java]
remove()
檢索並刪除此列表的頭(第一個元素)。
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList.remove());//Hello
System.out.println(myLinkedList);//[World, Hello, java]
remove(int index)
刪除該列表中指定位置的元素。返回被刪除的元素。
remove(Object o)
從列表中刪除指定元素的第一個出現(如果存在)。返回boolean值
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList.remove("Hello"));//true
System.out.println(myLinkedList);//[World, Hello, java]
removeFirst()
從此列表中刪除並返回第一個元素。
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList.removeFirst());//Hello
System.out.println(myLinkedList);//[World, Hello, java]
removeLast()
從此列表中刪除並返回最後一個元素。
removeFirstOccurrence(Object o)
刪除此列表中指定元素的第一個出現(從頭到尾遍歷列表時)。返回boolean值,如果存在該元素則返回true
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList.removeFirstOccurrence("java"));//true
System.out.println(myLinkedList);//[Hello, World, Hello]
removeLastOccurrence(Object o)
刪除此列表中指定元素的最後一次出現(從頭到尾遍歷列表時)。
set(int index, E element)
用指定的元素替換此列表中指定位置的元素。
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList);//[Hello, World, Hello, java]
myLinkedList.set(3,"CSDN");
System.out.println(myLinkedList);//[Hello, World, Hello, CSDN]
toArray()
以正確的順序(從第一個到最後一個元素)返回一個包含此列表中所有元素的數組。
offer(E e)
將指定的元素添加爲此列表的尾部(最後一個元素)。返回boolean值。
offerFirst(E e)
在此列表的前面插入指定的元素。返回boolean值。
offerLast(E e)
在該列表的末尾插入指定的元素。返回boolean值。
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
myLinkedList.offer("one");
System.out.println(myLinkedList);//[Hello, World, Hello, java, one]
myLinkedList.offerFirst("two");
System.out.println(myLinkedList);//[two, Hello, World, Hello, java, one]
myLinkedList.offerLast("three");
System.out.println(myLinkedList);//[two, Hello, World, Hello, java, one, three]
判斷元素
contains(Object o)
如果此列表包含指定的元素,則返回 true 。
查詢元素
element()
檢索但不刪除此列表的頭(第一個元素)。
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList.element());//Hello
System.out.println(myLinkedList);//[Hello, World, Hello, java]
get(int index)
返回此列表中指定位置的元素。
getFirst()
返回此列表中的第一個元素。
getLast()
返回此列表中的最後一個元素。
indexOf(Object o)
返回此列表中指定元素的第一次出現的索引,如果此列表不包含元素,則返回-1。
lastIndexOf(Object o)
返回此列表中指定元素的最後一次出現的索引,如果此列表不包含元素,則返回-1。
peek()
檢索但不刪除此列表的頭(第一個元素)。
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList.peek());//Hello
System.out.println(myLinkedList);//[Hello, World, Hello, java]
peekFirst()
檢索但不刪除此列表的第一個元素,如果此列表爲空,則返回 null 。
peekLast()
檢索但不刪除此列表的最後一個元素,如果此列表爲空,則返回 null 。
LinkedList<String> myLinkedList = new LinkedList<>(Arrays.asList("Hello","World","Hello","java"));
System.out.println(myLinkedList.peekLast());//java
System.out.println(myLinkedList);//[Hello, World, Hello, java]
其他方法
size()
返回此列表中的元素數。