顯示具有 Collection 標籤的文章。 顯示所有文章
顯示具有 Collection 標籤的文章。 顯示所有文章

2014年4月17日 星期四

集合 Collection:概述

集合 Collection:與陣列Array有點類似,處理一群相關性的資料(或稱“元素”)。這些資料以Java 提供的工具箱 Collections 類別來處理,此工具箱包含 Hashtable、TreeSet、ArrayList、LinkedList、HashMap、TreeMap 等。




















集合物件的特性

集合界面 具體實作類別 排序性 循序性 唯一性 鍵值對應
Set HashSet 有
SortedSet TreeSet 有 有
List ArrayList, LinkedList 有
Map HashMap 有
SortedMap TreeMap 有 有

參考


1. How are the collections structured? Which one should I choose?

集合 Collection:Set / HashSet

import java.util.HashSet;
import java.util.Set;


public class CollectionHasSet {

 public static void main(String[] args) {
  Set <String> hset = new HashSet< > ();
  hset.add("西瓜");
  
  String[] fruit = {"鳳梨","草莓","西瓜" };
  for(String p : fruit)
   hset.add(p);
  
  System.out.println(hset);
  
 }
}

執行結果










西瓜有加入嗎? 若改為 hset.add("葡萄"); 呢?
import java.util.HashSet;
import java.util.Set;


public class CollectionHasSet {

 public static void main(String[] args) {
  Set <String> hset = new HashSet< > ();
  hset.add("葡萄");
  
  String[] fruit = {"鳳梨","草莓","西瓜" };
  for(String p : fruit)
   hset.add(p);
  
  System.out.println(hset);
  
 }
}

執行結果

集合 Collection:SortedSet / TreeSet


import java.util.TreeSet;


public class CollectionTreeSet {

 public static void main(String[] args) {
  
  TreeSet < Integer > tset = new TreeSet < >();
  System.out.println("亂數取出 6 個號碼 (範圍 1 到 46)");
  for (int i =1;i <= 6; i++){
   while(true){
    int num = (int) (Math.random() * 46) + 1;
    if (tset.add(num)){
     System.out.println("第 "+ i + " 個號碼" + num);
     break;
    }
   }
  }
  System.out.println("物件"+ tset);
  System.out.println("物件第一個元素為 "+ tset.first());
  System.out.println("物件最後一個元素為 "+ tset.last());
  System.out.println("物件介於20 ~ 30 的元素為 "+ tset.subSet(20, 30));
 }

}
執行結果

集合 Collection:Map / HasMap


import java.util.HashMap;

public class CollectionHashMap {

 public static void main(String[] args) {
  HashMap <String, String> hmap = new HashMap<&gr;();
  hmap.put("1號","鳳梨");
  hmap.put("2號","草莓");
  hmap.put("3號","西瓜");
  System.out.println("水果籃子有: "+ hmap);
  
  if(hmap.containsKey("3號"))
   System.out.println("重複購買水果:(\"3號\",\"草莓\")");
  hmap.put("3號","草莓");
  System.out.println("水果籃子有: "+ hmap);
  
  System.out.println("增購水果:(\"4號\",\"西瓜\")");
  hmap.put("4號","西瓜");
  System.out.println("水果籃子有: "+ hmap);
  
  System.out.println("取消購買水果:(\"4號\",\"西瓜\")");
  hmap.remove("4號");
  System.out.println("水果籃子有: "+ hmap);
 }
}


執行結果

集合 Collection:SortedMap / TreeMap

import java.util.TreeMap;

public class CollectionSortedMap {

 public static void main(String[] args) {
  TreeMap <String, String> tmap = new TreeMap<>();
  tmap.put("5號","芒果");
  tmap.put("4號","西瓜");
  tmap.put("2號","草莓");
  tmap.put("3號","西瓜");
  tmap.put("1號","鳳梨");
  
  System.out.println("水果籃子有: "+ tmap);
  
  String key = tmap.get("3號");
  System.out.println("籃子裡第3號水果是 "+key);
  
 }

}

執行結果

集合 Collection:List / LinkedList


import java.util.ArrayList;
import java.util.LinkedList;



public class CollectionLinkedList {

 public static void main(String[] args) {
  ArrayList <Integer> aryList = new ArrayList<>();
  System.out.println("亂數取出 6 個號碼 (範圍 1 到 46)");
  for (int i =1;i <= 6; i++){
   while(true){
    int num = (int) (Math.random() * 46) + 1;
    if (aryList.add(num)){
     System.out.println("第 "+ i + " 個號碼" + num);
     break;
    }
   }
  }
  
  LinkedList <Integer> queue = new LinkedList <>(aryList);
  System.out.println("取出佇列 (以先進先出):");
  for(int j  = queue.size() - 1; j >= 0; j--){
   System.out.print(queue.getFirst() + " ");
   queue.removeFirst();
  }
  System.out.println();
  
  LinkedList <Integer> stack = new LinkedList <>(aryList);
  System.out.println("取出堆疊 (以後進先出):");
  while (true){
   System.out.print(stack.removeLast() + " ");
   if(stack.isEmpty())
    break;
  }
  System.out.println();
 }

}

執行結果

集合 Collection:Collections 集合類別

import java.util.ArrayList;
import java.util.Collections;

public class CollectionTest {

 public static void main(String[] args) {
  ArrayList <Integer> list = new ArrayList<> ();
  list.add(50);
  
  Integer[] fruit = {10,60,20,90 };
  for(Integer p : fruit)
   list.add(p);
  
  System.out.println("Number : "+ list);
  
  Collections.sort(list);
  System.out.println("Number(順排) : "+ list);
  
  Collections.reverse(list);
  System.out.println("Number(反排) : "+ list);
 }

}


執行結果

集合 Collection:Iterator 走訪器

Iterator 走訪器的走訪 visit 方式是單向的


import java.util.ArrayList;
import java.util.Iterator;

public class CollectionIterator {

 public static void main(String[] args) {
  ArrayList <Integer> list = new ArrayList<> ();
  list.add(50);
  
  Integer[] fruit = {10,60,20,90 };
  for(Integer p : fruit)
   list.add(p);
  
  System.out.println("Number : "+ list);
  
  Iterator<Integer> itera = list.iterator();
  while(itera.hasNext()){
   int num = itera.next();
   if (num >= 50)
    itera.remove();
  }
  
  System.out.println("Number : "+ list);
 }

}

執行結果

集合 Collection:ListIterator 走訪器

ListIterator 走訪器的走訪 visit 方式是雙向的


import java.util.ArrayList;
import java.util.ListIterator;

public class CollectionListIterator {

 public static void main(String[] args) {
  ArrayList <Integer> list = new ArrayList<> ();
  list.add(50);
  
  Integer[] fruit = {10,60,20,90 };
  for(Integer p : fruit)
   list.add(p);
  
  System.out.println("Number : "+ list);
  
  ListIterator<Integer> itera = list.listIterator();
  while(itera.hasNext()){
   itera.next();
   if (itera.nextIndex() == 2)
    itera.set(100);
  }
  
  System.out.println("Number : "+ list);
  
  System.out.print("Number : [");
  while(itera.hasPrevious())
   System.out.print(itera.previous() + " ");
  System.out.println(']');
 }

}

執行結果