nybon 发表于 2005/2/5 18:07:05 |
Collection
(Steven, idealist@gcn.net.tw, 2002/7/6, jdk 1.4)
下圖為Collection物件的繼承圖,Collection的子物件共分三類,List、Set和Vector,List和Set最大的分別在於List可以存放兩個以上同樣的物件; Set則是一種物件只會存放一個,當同一種物件存兩次時,也只會存一個; Vector則可以把它當作動作陣列。底下則分別為LinkedList、ArrayList、HashSet、TreeSet、Vector及Stack的範例程式…。要特別注意,Vector和Stack是Java 1就有的舊類別,其所有method都宣告為synchronized,以避免當一個以上執行緒同時存取時會發生不可預期的結果,其餘類別是Java 1.2才加入的,並沒有宣告為synchronized,所以使用在多緒程式設計時,程式設計師要自己加上臨界區間的處理。
500)this.width=500'>
1. ArrayList
ArrayList是可以在執行時期動態成長的陣列,而且陣列元素不只能夠容納簡單的資料型別,還可以容納物件進去, ArrayList還可以透過toArray轉成一般陣列。
import java.util.*;
public class arraylist {
public static void main(String[] args) {
ArrayList arraylist = new ArrayList();
arraylist.add("Item 0");
arraylist.add("Item 2");
arraylist.add("Item 3");
arraylist.add("Item 4");
arraylist.add("Item 5");
arraylist.add("Item 6");
arraylist.add(1, "Item 1");
System.out.println(arraylist);
arraylist.remove("Item 5");
System.out.println(arraylist);
for(int i=0; i<arraylist.size(); i++) {
System.out.print(arraylist.get(i).toString() + ", ");
}
System.out.println("");
Object[] strItems = arraylist.toArray();
for(int i=0; i<strItems.length; i++) {
System.out.print(strItems[i].toString() + ", ");
}
}
}
執行結果:
[Item 0, Item 1, Item 2, Item 3, Item 4, Item 5, Item 6]
[Item 0, Item 1, Item 2, Item 3, Item 4, Item 6]
Item 0, Item 1, Item 2, Item 3, Item 4, Item 6,
Item 0, Item 1, Item 2, Item 3, Item 4, Item 6,
2. LinkedList
LinkedList是Java提供的連結串列,它可以透過listIterator取得ListIterator指位器來存取串列中的元素。
import java.util.*;
public class linkedlist {
public static void main(String[] args) {
LinkedList linkedlist1 = new LinkedList();
linkedlist1.add("Item 2");
linkedlist1.add("Item 3");
linkedlist1.add("Item 4");
linkedlist1.add("Item 5");
linkedlist1.add(0, "Item 1");
linkedlist1.addFirst("Item 0");
linkedlist1.addLast("Item 6");
System.out.println(linkedlist1);
linkedlist1.remove(2);
linkedlist1.remove("Item 5");
linkedlist1.removeLast();
System.out.println(linkedlist1);
linkedlist1.set(1, "New Item");
System.out.println(linkedlist1);
for(int i=0; i<linkedlist1.size(); i++) {
System.out.print(linkedlist1.get(i) + ", ");
}
System.out.println("");
ListIterator li = linkedlist1.listIterator();
while (li.hasNext()) {
String strItem = (String) li.next();
System.out.print(strItem + ", ");
}
System.out.println("");
while (!linkedlist1.isEmpty()) {
String strItem = (String) linkedlist1.removeFirst();
System.out.print(strItem + ", ");
}
}
}
執行結果:
[Item 0, Item 1, Item 2, Item 3, Item 4, Item 5, Item 6]
[Item 0, Item 1, Item 3, Item 4]
[Item 0, New Item, Item 3, Item 4]
Item 0, New Item, Item 3, Item 4,
Item 0, New Item, Item 3, Item 4,
Item 0, New Item, Item 3, Item 4,
3. HashSet
HashSet是Java提供的雜湊類別,它的特性是不會因元素增加而使得存取時間增長,HashSet也可以透過iterator取得Iterator指位器來存取雜湊表中的元素。
import java.util.*;
public class hashset {
public static void main(String[] args) {
HashSet hashset1 = new HashSet();
for(int i=0; i<10; i++) {
hashset1.add("Item " + i);
}
System.out.println(hashset1);
Iterator ir = hashset1.iterator();
while (ir.hasNext()) {
String strItem = (String) ir.next();
System.out.print(strItem + ", ");
}
}
}
執行結果:
[Item 9, Item 8, Item 7, Item 6, Item 5, Item 4, Item 3, Item 2, Item 1, Item 0]
Item 9, Item 8, Item 7, Item 6, Item 5, Item 4, Item 3, Item 2, Item 1, Item 0,
4. TreeSet
在TreeSet中加入元素,它會幫我們建成一個平衡的二元樹,所以元素增加很多,搜尋的時間卻只會增加一點點,因為TreeSet的元素可以是任意Object,所以TreeSet可以讓我們透過Comparator介面自行定義TreeSet的排序方式,也可以透過iterator取得Iterator指位器來存取當中的元素。
import java.util.*;
import java.text.*;
public class treeset {
public static void main(String[] args) {
Random rd = new Random();
DecimalFormat df = new DecimalFormat("00");
TreeSet treeset1 = new TreeSet();
for(int i=0; i<10; i++) {
treeset1.add("Item " + df.format((Math.abs(rd.nextInt()) % 100)));
}
System.out.println(treeset1);
Iterator ir = treeset1.iterator();
while (ir.hasNext()) {
String strItem = (String) ir.next();
System.out.print(strItem + ", ");
}
System.out.println("");
ir = treeset1.iterator();
ir.next();
SortedSet ss = treeset1.subSet(ir.next(), treeset1.last());
System.out.println(ss);
ss = treeset1.tailSet(treeset1.first());
System.out.println(ss);
ss = treeset1.headSet(treeset1.last());
System.out.println(ss);
TreeSet treeset2 = new TreeSet(new NewComparator());
while (!treeset1.isEmpty()) {
String strItem = (String) treeset1.first();
treeset1.remove(strItem);
treeset2.add(strItem);
//System.out.print(strItem + ", ");
}
treeset2.add("Item X");
System.out.println("");
System.out.println(treeset1);
System.out.println(treeset2);
}
}
/*
利用Comparator我們可以自行定義TreeSet的排序方式,只要實作Comparator的介面即可
*/
class NewComparator implements Comparator {
public int compare(Object obj1, Object obj2) {
System.out.println((String) obj1 + " : " + (String) obj2);
if (((String) obj1).equals("Item X")) return -1;
return ((String) obj1).compareTo((String) obj2);
}
}
執行結果:
[Item 15, Item 23, Item 24, Item 31, Item 43, Item 48, Item 57, Item 60, Item 68, Item 69]
Item 15, Item 23, Item 24, Item 31, Item 43, Item 48, Item 57, Item 60, Item 68, Item 69,
[Item 23, Item 24, Item 31, Item 43, Item 48, Item 57, Item 60, Item 68]
[Item 15, Item 23, Item 24, Item 31, Item 43, Item 48, Item 57, Item 60, Item 68, Item 69]
[Item 15, Item 23, Item 24, Item 31, Item 43, Item 48, Item 57, Item 60, Item 68]
Item 23 : Item 15
Item 24 : Item 15
Item 24 : Item 23
Item 31 : Item 23
Item 31 : Item 24
Item 43 : Item 23
Item 43 : Item 24
Item 43 : Item 31
Item 48 : Item 23
Item 48 : Item 31
Item 48 : Item 43
Item 57 : Item 23
Item 57 : Item 31
Item 57 : Item 43
Item 57 : Item 48
Item 60 : Item 23
Item 60 : Item 31
Item 60 : Item 48
Item 60 : Item 57
Item 68 : Item 31
Item 68 : Item 48
Item 68 : Item 57
Item 68 : Item 60
Item 69 : Item 31
Item 69 : Item 48
Item 69 : Item 60
Item 69 : Item 68
Item X : Item 31
Item X : Item 23
Item X : Item 15
[]
[Item X, Item 15, Item 23, Item 24, Item 31, Item 43, Item 48, Item 57, Item 60, Item 68, Item 69]
5. Vector
import java.util.*;
public class vector {
public static void main(String[] args) {
Vector vector1 = new Vector(5);
System.out.println("Capacity: " + vector1.capacity());
System.out.println("Size: " + vector1.size());
vector1.addElement(new Integer(0));
vector1.addElement(new Integer(1));
vector1.addElement(new Float(2));
vector1.addElement(new Integer(3));
vector1.addElement(new Integer(4));
vector1.addElement(new Integer(4));
vector1.addElement(new Double(5));
System.out.println("Capacity: " + vector1.capacity());
System.out.println("Size: " + vector1.size());
if (vector1.contains(new Integer(3))) {
System.out.println("Found a 3");
}
else {
System.out.println("3 not found");
}
vector1.remove(new Integer(3));
if (vector1.contains(new Integer(3))) {
System.out.println("Found a 3");
}
else {
System.out.println("3 not found");
}
vector1.remove(new Integer(4));
if (vector1.contains(new Integer(4))) {
System.out.println("Found a 4");
}
else {
System.out.println("4 not found");
}
System.out.println("Size: " + vector1.size());
}
}
執行結果:
Capacity: 5
Size: 0
Capacity: 10
Size: 7
Found a 3
3 not found
Found a 4
Size: 5
6. Stack
import java.util.*;
public class stack {
public static void main(String[] args) {
Stack stack1 = new Stack();
for(int i=0; i<5; i++) {
stack1.push(new Integer(i));
}
Integer obj = (Integer) stack1.peek();
System.out.println(obj);
System.out.println("=== ");
while (!stack1.isEmpty()) {
System.out.println((Integer) stack1.pop());
}
}
}
執行結果:
4
===
4
3
2
1
0
|