List中的元素是有序排列的而且可重復
1.LinkedList
LinkedList是非線程安全的,底層是基於雙向鏈表實現的
LinkedList常用方法:
- toArray() 以正確的順序(從第一個到最后一個元素)返回一個包含此列表中所有元素的數組
- size() 返回此列表中的元素數
- set(int index,E element) 用指定的元素替換此列表中指定位置的元素
- removeLast() 從此列表中刪除並返回最后一個元素
- removeFirst() 從此列表中刪除並返回第一個元素
- remove(int index) 刪除該列表中指定位置的元素
- getFirst() 返回此列表中的第一個元素
- getLast() 返回此列表中的最后一個元素
- get(int index) 返回此列表中指定位置的元素
- add(E element) 將指定的元素追加到此列表的末尾
- add(int index,E element) 在此列表中的指定位置插入指定的元素
- addFirst(E element) 在該列表開頭插入指定的元素
- addLast(E element) 將指定的元素追加到此列表的末尾
- clear() 從列表中刪除所有元素
2.ArrayList
ArrayList是非線程安全的,底層是基於數組實現
ArrayList常用方法:
- toArray() 以正確的順序(從第一個到最后一個元素)返回一個包含此列表中所有元素的數組
- subList(int fromIndex,int toIndex) 返回此列表中指定的
fromIndex
(包括)和toIndex
之間的獨占視圖 - size() 返回此列表中的元素數
- set(int index,E element) 用指定的元素替換此列表中指定位置的元素
- removeRange(int fromIndex,int toIndex) 從這個列表中刪除所有索引在
fromIndex
(含)和toIndex
之間的元素 - remove(int index) 刪除該列表中指定位置的元素
- isEmpty() 如果此列表不包含元素,則返回true
- get(int index) 返回此列表中指定位置的元素
- add(E element) 將指定的元素追加到此列表的末尾
- add(int index,E element) 在此列表中的指定位置插入指定的元素
- clear() 從列表中刪除所有元素
package com.gather; /** * 人實體類 * @author yyx * 2019年2月27日 */ public class Person { private String userName; private Integer userAge; public Person(String userName, Integer userAge) { super(); this.userName = userName; this.userAge = userAge; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Integer getUserAge() { return userAge; } public void setUserAge(Integer userAge) { this.userAge = userAge; } @Override public String toString() { return "Person [userName=" + userName + ", userAge=" + userAge + "]"; } }
package com.gather; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; /** * * @author yyx 2019年2月27日 */ public class LIstPractise { public static void main(String[] args) { List<Person> list = new ArrayList<>(); Person p1 = new Person("張三", 22); Person p2 = new Person("李四", 23); Person p3 = new Person("王五", 18); list.add(p1); list.add(p2); list.add(p3); // 第一種遍歷方式:for循環 for (int i = 0; i < list.size(); i++) { Person person = list.get(i); System.out.println(person); } System.out.println("----------------"); // 第二種遍歷方式:foreach for (Person person : list) { System.out.println(person); } System.out.println("----------------"); // 第三種遍歷方式:Iterator Iterator<Person> iterator = list.iterator(); while (iterator.hasNext()) { Person person = iterator.next(); System.out.println(person); } System.out.println("----------------"); LinkedList<Person> linkedList=new LinkedList<>(); linkedList.addFirst(p3); linkedList.add(p2); linkedList.addLast(p1); //getFirst() 返回此列表中的第一個元素 System.out.println(linkedList.getFirst()); //getLast() 返回此列表中的最后一個元素 System.out.println(linkedList.getLast()); System.out.println("----------------"); //toArray() 以正確的順序(從第一個到最后一個元素)返回一個包含此列表中所有元素的數組 Object[] persons=linkedList.toArray(); System.out.println(persons[0]); } }
3.ArrayList和LinkedList的區別
- ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構
- 對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指針
- 對於新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據
- ArrayList沒有實現Queue隊列接口,LinkedList實現了Queue接口
4.Vector
Vector是線程安全的,底層是基於動態數組實現
Vector常用方法:
- add(E element) 將指定的元素追加到此Vector的末尾
- add(int index,E element) 在此Vector中的指定位置插入指定的元素
- elementAt(int index) 返回指定索引處的組件
- get(int index) 返回此向量中指定位置的元素
- removeElementAt(int index) 刪除指定索引處的組件
- removeRange(int fromIndex,int toIndex) 從此列表中刪除所有索引為
fromIndex
(含)和toIndex
之間的元素
package com.gather; import java.util.Iterator; import java.util.Vector; /** * 大小可以動態變化,其存儲由容器自動處理 * @author yyx * 2019年2月28日 */ public class VectorPractise { public static void main(String[] args) { Vector<Person> vector = new Vector<>(); Person p1 = new Person("張三", 22); Person p2 = new Person("李四", 23); Person p3 = new Person("王五", 18); vector.add(p1); vector.add(p2); vector.add(p3); Iterator<Person> iterator = vector.iterator(); while (iterator.hasNext()) { Person person = iterator.next(); System.out.println(person); } } }