java容器的關係結構圖如下:
1. List
List承諾可以將元素維護在特定的序列中,List介面在Collection的基礎上添加了大量的方法,可以在List的中間插入和移除元素。
有兩種基本類型的List:
1. ArrayList是實現了基於動態數組的資料結構,LinkedList基於鏈表的資料結構。
2. 對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。
3. 對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。
ArrayList和LinkedList在效能上各有優缺點,都有各自所適用的地方,總的說來可以描述如下:
1.對ArrayList和
LinkedList而言,在列表末尾增加一個元素所花的開銷都是固定的。對ArrayList而言,主要是在內部數組中增加一項,指向所添加的元素,偶
爾可能會導致對數組重新進行分配;而對LinkedList而言,這個開銷是統一的,分配一個內部Entry對象。
2.在ArrayList的中間插入或刪除一個元素意味著這個列表中剩餘的元素都會被移動;而在LinkedList的中間插入或刪除一個元素的開銷是固定的。
3.LinkedList不支援高效的隨機元素訪問。
4.ArrayList的空間浪費主要體現在在list列表的結尾預留一定的容量空間,而LinkedList的空間花費則體現在它的每一個元素都需要消耗相當的空間
可以這樣說:當操作是在一列資料的後面添加資料而不是在前面或中間,並且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的效能;當你的操作是在一列資料的前面或中間添加或刪除資料,並且按照順序訪問其中的元素時,就應該使用LinkedList了。
2. Set
set不儲存重複的元素
package JavaCollectionObject; import java.util.HashSet; import java.util.Set; public class JavaSet { public static void main(String[]args){ Set<Integer> setInt=new HashSet<Integer>(); //如果要排序,用new TreeSet<Integer>(); for(int i=0;i<10000;i++){ int temp=(int)(Math.random()*1000);// setInt.add(temp); } System.out.println(setInt); } }
如果要進行排序可以用TreeSet
TreeSet<String> tree = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER); tree.add("china"); tree.add("America"); tree.add("Japan"); tree.add("Chinese"); Iterator iter = tree.iterator(); while(iter.hasNext()) { System.out.println(iter.next()); }
輸出:
- America
- china
- Chinese
- Japan
3. Map
Key-Value的儲存方式
public class JavaMap { public static void main(String[] args) { Map<String,Long> m1 = new HashMap<String,Long> (); m1.put("Chinese", new Long(100000)); m1.put("English", new Long(20000)); m1.put("French", new Long(3000)); m1.put("Korean", new Long(400)); System.out.println("值為:"+m1.size()); //因為Map的key不可能重複,所以,可以用Set資料結構來儲存 Set<String> keySet = m1.keySet(); Iterator<String> ikey = keySet.iterator(); while(ikey.hasNext()){ System.out.println("\t"+ikey.next()); } //因為Map的值有可能重複,所以不能用Set,要用Collection Collection<Long> valueCol = m1.values(); Iterator<Long> ival = valueCol.iterator(); while(ival.hasNext()){ System.out.println("\t"+ ival.next()); } //根據key,取出特定的值 System.out.println("The value for Key \"Korean\" is "+m1.get("Korean").toString()); }
輸出:
值為:4
Korean
French
Chinese
English
400
3000
100000
20000
The value for Key "Korean" is 400