List動態陣列中兩個實現類:ArrayList和LinkedList的用法和區別
阿新 • • 發佈:2019-02-07
List
簡介
List是一個動態陣列,使用者可以對插入元素的位置進行精確的控制,可以根據整數索引(index)獲取序列中的元素,允許插入重複的值,包null值
常用的兩個實現類:ArrayList、LinkedList
ArrayList
構造方法
public ArrayList()
:建立一個ArrayList物件
常用方法
boolean add(E e);
:新增元素void add(int index, E element);
:向指定位置新增元素E get(int index);
:獲取指定位置的元素E set(int index, E element);
int indexOf(Object o);
:查詢指定元素的位置boolean contains(Object o);
:是否包含指定的元素boolean remove(Object o);
:移除指定的元素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物件
常用方法
void addFirst(E e)
:在開始位置新增元素void addLast(E e)
:在最後位置新增元素E removeLast()
:刪除最後的元素E removeFirst()
:刪除開始位置的元素
ArrayList和LinkedList的區別
- 對應隨機訪問,ArrayList效率要高,因為ArrayList儲存有下標
- 對應新增和刪除,LinkedList效率高,因為ArrayList需要移動元素