List接口及其常用子類
List中可以保存各個重複的內容。接口定義:public interface List<E> extends Collection<E>
List繼承Collection接口並大量擴充了Collection接口,擁有了更多的方法定義。
下面介紹List常用的子類:
1、ArrayList
定義: public class ArrayList<E> extends AbstractList<E> implements List<E>,
public class AbstractList<E> extends AbstractCollection<E> implements List<E>
(1)向集合中添加元素:
add():向list集合中添加元素;
add(int index,E element):向集合指定位置添加元素;
addAll(int index,Collection<?> c):向集合指定位置添加一組對象
例子:
public class ArrayListDemo01 {
public static void main(String[] args){
List<Object> list = new ArrayList<Object>();
List<String> list1 = new ArrayList<String>();
list.add("Hello World");
System.out.println(list);
list.add(0, 123);
System.out.println(list);
list1.add("456");
list1.add("789");
list.addAll(list1);
System.out.println(list);
System.out.println(list.size());
}
}
輸出結果爲:
[Hello World]
[123, Hello World]
[123, Hello World, 456, 789]
4
(2)、刪除集合中的元素:
add()方法一次只添加一個元素,多個元素添加會多次調用add(),每個元素之間用","隔開存儲,一個元素之內可以有","(在於定義的LIst類型);
remove(int index):刪除某個位置的元素;
remove(E element):刪除某個元素;
removeAll(Collection<?> c):刪除一組對象
例:
public class ArrayListDemo02 {
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("123,Hello World");
System.out.println(list);
System.out.println(list.size());
// list.remove(1); 錯誤,此list總共只有一個長度,存儲位置爲0
// list.remove("123"); 錯誤,"123,Hello World"爲一個元素,不能刪除某一元素的一部分
list.add(0,"456");
list.remove(1);
System.out.println(list);
System.out.println(list.size());
list.remove("456");
System.out.println(list);
System.out.println(list.size());
}
}
輸出結果爲:
[123,Hello World]
1
[456]
1
[]
0
(3)集合的其他相關操作:
List中還存在截取集合、查找元素位置、判斷元素是否存在、判斷集合是否爲空
public class ArrayListDemo03 {
public static void main(String[] args){
List<String> list = new ArrayList<String>();
System.out.println("集合是否爲空?" + list.isEmpty());
list.add("Hello");
list.add("World");
list.add(0, "123");
System.out.println(list.contains("Hello") ? "\"Hello\"字符串存在!" : "\"Hello\"字符串不存在!");
List<String> subList = list.subList(1,2);//截取集合
System.out.println("集合截取:"+subList);
System.out.println("123字符的位置:"+list.indexOf("123"));
}
}
輸出結果爲:
集合是否爲空?true
"Hello"字符串存在!
集合截取:[Hello]
123字符的位置:0
(4)集合的輸出:
我們將在後續文章中講解
2、Vector
List接口中還有一個子類:Vector,他是一個挽救的子類,
定義:public class Vector<E> extends AbstractList<E> implements List<E>
List<String> list = new Vector<String>();
list.add();
Vector<String> list1 = new Vector<String>();
list1.addElement();
使用上和ArrayList沒有太大的區別。
ArrayList與Vector的比較:
對比 | 推出時間 | 性能 | 線程安全 |
ArrayList | 新,JDK1.2後 | 異步處理, 高性能 |
非線程安全 |
Vector | 舊,JDK1.0時 | 同步處理, 低性能 |
線程安全 |
3、LinkedList子類與Queue接口
LinkedList表示的是一個鏈表的操作類,此類實現了List同時也實現了Queue接口,先進先出。
(1)在鏈表的開頭和結尾增加數據,爲了達到鏈表的目的,必須使用LinkedList類
public class LinkedListDemo01 {
/**
* LinkedList類,對鏈表增加數據
*/
public static void main(String[] args) {
LinkedList<String> link = new LinkedList<String>();
link.add("A");
link.add("B");
link.add("C");
System.out.println("初始化鏈表:"+link);
link.addFirst("X");//在鏈表頭增加內容
link.addLast("Y");//在鏈表尾部增加內容
System.out.println("增加頭尾之後的鏈表:"+link);
}
}
輸出結果:
初始化鏈表:[A, B, C]
增加頭尾之後的鏈表:[X, A, B, C, Y]
(2)找到鏈表的頭
public class LinkedListDemo02 {
/**
* 找到標頭的方式
*/
public static void main(String[] args) {
LinkedList<String> link = new LinkedList<String>();
link.add("A");
link.add("B");
link.add("C");
System.out.println("創建的鏈表"+link);
System.out.println("1.element方法找到表頭:"+link.element());
System.out.println("找完之後的鏈表:"+link);
System.out.println("2.peek方法找到表頭:"+link.peek());
System.out.println("找完之後的鏈表:"+link);
System.out.println("3.poll方法找到表頭:"+link.poll());
System.out.println("找完之後的鏈表:"+link);
}
}
輸出結果:
創建的鏈表[A, B, C]
1.element方法找到表頭:A
找完之後的鏈表:[A, B, C]
2.peek方法找到表頭:A
找完之後的鏈表:[A, B, C]
3.poll方法找到表頭:A
找完之後的鏈表:[B, C]
(3)先進先出的方式取出全部數據
public class LinkedListDemo03 {
/**
* 以先進先出的方式取出全部數據
*/
public static void main(String[] args) {
LinkedList<String> link = new LinkedList<String>();
link.add("A");
link.add("B");
link.add("C");
System.out.println(link);
System.out.println("以FIFO方式輸出:");
for(int i=0;i<link.size()+2;i++){
System.out.print(link.poll()+"、");
}
}
}
輸出結果:
[A, B, C]
以FIFO方式輸出:
A、B、C、
在List 接口中實際開發用的較多的是ArrayList類。
下文講解類集中Set接口的使用。