Java類集學習(二)List接口

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時 同步處理,
低性能
線程安全
從實際應用來開,ArrayList使用的比較多。

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接口的使用。






發佈了36 篇原創文章 · 獲贊 4 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章