【JAVA語法】持有對象--Java中List的用法

寫在前面:

    我也是一名java語言的愛好者,僅以此文作爲學習的記錄,對於文中出現的代碼規範,代碼格式,算法效率等問題,希望各路大神不吝賜教,在下感激不盡。同是學習的同學也同樣希望互相交流,取長補短。

                                                                                                                                                      ——[email protected]

以下內容是學習《java編程思想》(《Thinking in Java》)的筆記,包括對習題的實現。

java容器類庫中的兩種主要類型:他們的區別在於容器中的每個“槽”保存的元素個數

1.Collection在每個槽中只能保存一個元素,此類容器包括

    <1.1>list,它以特定的順序保存一組元素

    <1.2>set, 元素不能重複

    <1.3>Queue,只允許在容器的一端插入對象,並從另一端移除對象

2.Map在每個槽內保存了兩個對象,即鍵和與之關聯的值



在一個Collection中添加一組元素的方法。Arrays.asList()接受一個數組或是一個用逗號分隔的元素列表,並將其轉換爲一個List對象,

例如使用Collection構造器來初始化容器

Collection<Integer> collection = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));

Collections.addAll()方法接受一個Collection對象,以及一個數組或是一個用逗號分隔的列表,將元素添加到Collection中

例如:

Collections.addAll(collection,11,12,13,14,15)

一.List

List承諾可以將元素維護在特定的序列中,List接口在Collection的基礎上添加了大量的方法,使得可以在List的中間插入和移除元素。

有兩種類型的List。(1)基本的ArrayList,它用於隨機訪問元素,但是在List的中間插入和移除元素較慢

(我嘗試了一下兩種對ArrayList的初始化方式,貌似結果沒有什麼區別:

public class test {
	public static void main(String[] args){
		List<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
		List<Integer> list2 = Arrays.asList(1,2,3);
		System.out.println(list.getClass());
		System.out.println(list2.getClass());
	}
}

查詢api chm文檔,找到ArrayList的構造函數:


                             (2)LinkedList,它通過代價較低的在List中間進行插入和刪除操作,提供了優化的順序訪問,LinkedList在隨機訪問方面相對比較慢,但是它的特性集較ArrayList更大(這個特性集我沒搞懂是什麼意思?)

書上的例子是以導入的Pet類爲例子,而225頁的練習五,要求修改例子,使用Integer而不是Pet

代碼實現:

package ListContainer;




import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Random;


public class ListFeatures {
	public static void main(String[] args){
		Random random = new Random(5);
		List<Integer> intLists = new ArrayList<Integer>(Arrays.asList(40,20,3,4,5,6,7,8));//構造一個集合
		System.out.println("1: "+intLists);
		Integer i = new Integer(10);
		intLists.add(i);
		System.out.println("2: "+intLists);
		System.out.println("3: "+intLists.contains(i));
		intLists.remove(i);//去掉元素i
		Integer i2 = intLists.get(2);
		System.out.println("4: "+i2+" "+intLists.indexOf(i2));
		Integer i3 = new Integer(5);
		System.out.println("5: "+intLists.indexOf(i3));
		System.out.println("6: "+intLists.remove(i3));
		System.out.println("7: "+intLists.remove(i2));
		System.out.println("8: "+intLists);
		intLists.add(3,new Integer(19));
		System.out.println("9: "+intLists);
		List<Integer> sub = intLists.subList(1, 4);
		System.out.println("subList: "+sub);
		System.out.println("10: "+intLists.containsAll(sub));
		Collections.sort(sub);
		System.out.println("sorted subList: "+sub);
		System.out.println("11: "+intLists.containsAll(sub));
		Collections.shuffle(sub,random);
		System.out.println("shuffle subList: "+sub);
		System.out.println("12: "+intLists.containsAll(sub));
		List<Integer> copy = new ArrayList<Integer>(intLists);
		sub = Arrays.asList(intLists.get(1),intLists.get(4));
		System.out.println("sub: "+sub);
		copy.retainAll(sub);//交集操作,保留所有copy與sub相同的元素,這樣子看來應該還是sub
		System.out.println("13: "+copy);
		copy = new ArrayList<Integer>(intLists);
		copy.remove(2);
		System.out.println("14: "+copy);
		copy.removeAll(sub);//移除sub的元素
		System.out.println("15: "+copy);
		copy.set(1, 99);//和之前的add方法不同的是,add是在這個位置增加一個元素,而set方法是在指定位置Replace an element
		System.out.println("16: "+copy);
		copy.addAll(sub);//再把sub添加回來
		System.out.println("17: "+copy);
		System.out.println("18: "+intLists.isEmpty());//判斷是否爲空
		intLists.clear();//清空容器
		System.out.println("19: "+intLists);
		System.out.println("20: "+intLists.isEmpty());
		intLists.addAll(Arrays.asList(6,5,4,3,2,1));
		System.out.println("21: "+intLists);
		Object[] o = intLists.toArray();
		System.out.println("22: "+o[3]);
		Integer[] array = intLists.toArray(new Integer[0]);//toArray方法,作用是把任意的Collection轉換成一個數組,無參的時候返回一個Object類型的數組,有參數的時轉爲與參數同類型的數組,(假如這個參數(數組)能通過參數類型檢查)
		System.out.println("23: "+array[3]);
		
		
		
	}
}

實現結果:


關於java.util.Random這個類,構造函數中Random()包括無參和有參Random(seed),有參構造方法的種子有何作用 在另一篇文章中有說明

List的兩種實現方式ArrayList和LinkedList,顧名思義一個底層爲數組,另一個底層爲鏈表。

具體的區別,點擊這篇文章http://blog.csdn.net/qq_37935670/article/details/79594159

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