算法競賽中的常用JAVA API :ArrayList(Vector) 和 LinkedList

瞭解其他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 表示形式。

拷貝

  1. 使用等號拷貝
    ArrayList<Integer> Arr1 = new ArrayList<>();
    ArrayList<Integer> Arr2 = new ArrayList<>();
    // 將Arr2的值拷貝給Arr1
    Arr1 = Arr2; // Arr1之前的值會自動被垃圾回收
    

以下兩種方式也適用於其他集合的拷貝

  1. 使用構造函數拷貝
    只要該集合的構造函數支持參數爲集合就可以使用此方法拷貝

    ArrayList<Integer> Arr2 = new ArrayList<>();
    // 將Arr2的值拷貝給Arr1
    ArrayList<Integer> Arr1 = new ArrayList<>(Arr2);
    
  2. 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 元素提供了統一的命名方法。這些操作允許將鏈接列表用作堆棧、隊列或雙端隊列

  1. add(E e)//在末尾添加一個元素
  2. addFirst(E e)//在開頭添加一個元素
  3. addLast(E e)//在末尾添加一個元素
  4. offer(E e)//將指定元素添加到此列表的末尾(最後一個元素)
  5. clear()//從此列表中移除所有元素
  6. element()獲取但不移除此列表的頭(第一個元素)。
  7. peek()//獲取但不移除此列表的頭(第一個元素)。
  8. poll()//獲取並移除此列表的頭(第一個元素)
  9. getFirst()返回此列表的第一個元素。
  10. getLast()返回此列表的最後一個元素
  11. indexOf(Object o)返回此列表中首次出現的指定元素的索引,如果此列表中不包含該元素,則返回 -1。
  12. lastIndexOf(Object o)返回此列表中最後出現的指定元素的索引,如果此列表中不包含該元素,則返回 -1。
  13. pop()從此列表所表示的堆棧處彈出一個元素。
  14. push(E e)將元素推入此列表所表示的堆棧。
  15. remove()獲取並移除此列表的頭(第一個元素)。
  16. remove(int index)移除此列表中指定位置處的元素
  17. size()//返回元素個數

大體上來說LinkedList和ArrayList的方法用法都一樣,無非是get,set等方法,不過LinkedList可以用作棧和隊列(鏈表實現),因爲它包含了(
push,pop)棧的進出,(offer,poll)隊列的進出等方法。
最後說一下遍歷:
9. 通過迭代器

Iterator iterator=students.iterator();
    while(iterator.hasNext()){
        System.out.println(iterator.next());
    }
  1. for循環和get方法
for(int i = 0; i < n; i++)
    System.out.println(E.get(i))
  1. 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來用。

在使用這些集合的時候,我們不需要背會所有的方法(函數),只需要知道一個大概就行了,因爲編譯器有方法提示嘛。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章