1. 程式人生 > >List動態陣列中兩個實現類:ArrayList和LinkedList的用法和區別

List動態陣列中兩個實現類:ArrayList和LinkedList的用法和區別

List

簡介

List是一個動態陣列,使用者可以對插入元素的位置進行精確的控制,可以根據整數索引(index)獲取序列中的元素,允許插入重複的值,包null值

常用的兩個實現類:ArrayList、LinkedList

ArrayList

構造方法

  • public ArrayList():建立一個ArrayList物件

常用方法

  1. boolean add(E e);:新增元素
  2. void add(int index, E element);:向指定位置新增元素
  3. E get(int index);:獲取指定位置的元素
  4. E set(int index, E element);
    :修改指定位置的元素
  5. int indexOf(Object o);:查詢指定元素的位置
  6. boolean contains(Object o);:是否包含指定的元素
  7. boolean remove(Object o);:移除指定的元素
  8. E remove(int index);:移除指定位置的元素

foreach迴圈

List<String> list = new ArrayList<String>();
// 新增元素
list.add("張三");
list.add("李四");
list.add("王五");
// 使用foreach遍歷
for (String str : list) {
    System.out.println(str);
}

List中存放自定義型別

class Person {
    private String name;
    private int age;

    //省略構造方法、set、get、toString
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return
false; Person other = (Person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } }
List<Person> list = new ArrayList<Person>();
Person p1 = new Person("張三", 20);
Person p2 = new Person("張三", 20);
list.add(p1);
System.out.println(list.contains(p2));//true
System.out.println(list.indexOf(p2));//0

indexOf方法是使用equals比較兩個物件是否相等

引用傳遞

List<String> list1 = new ArrayList<String>();
list1.add("張三");
list1.add("李四");
list1.add("王五");
List<String> list2 = new ArrayList<String>();
list2.addAll(list1);
//將List1中的張三刪除
list1.remove("張三");
System.out.println(list1);
System.out.println(list2);

addAll方法將list1中的元素全部新增到list2

LinkedList

LinkedList是一個連結串列,實現了List介面

構造方法

  • public LinkedList():建立一個LinkedList物件

常用方法

  1. void addFirst(E e):在開始位置新增元素
  2. void addLast(E e):在最後位置新增元素
  3. E removeLast():刪除最後的元素
  4. E removeFirst():刪除開始位置的元素

ArrayList和LinkedList的區別

  1. 對應隨機訪問,ArrayList效率要高,因為ArrayList儲存有下標
  2. 對應新增和刪除,LinkedList效率高,因為ArrayList需要移動元素