瞭解其他JAVA 常用API和算法點這裏 >> https://blog.csdn.net/GD_ONE/article/details/104061907
摘要:
本文主要介紹ArrayList(Vector)和LinkedList的常用方法, 也就是動態數組和鏈表。
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)隊列的進出等方法。
最後說一下遍歷:
9. 通過迭代器
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來用。
在使用這些集合的時候,我們不需要背會所有的方法(函數),只需要知道一個大概就行了,因爲編譯器有方法提示嘛。