Date: 10/04
List
作用是收集物件,並以索引益式保留收集的物件順序。
ArrayList
在陣列中的排序使用可以得到較快的速度,
如果是需要調整索引順序時,則會有較差的表現。
LinkedList
在實作 List 介面時,採用了 (Link) 結構。
first > Object > Object > Object
next next next
Node Node Node
如果要指定索引隨機存取物件時,不建議用 LinkedList,其每次存取都會從頭 (first ) 開始,
但若只是調整索引順序,從還是可以使用 LinkedList。
//================================================================//
支援佇列操作的 Queue
繼承自 Collection,所以它也具有 Collection 的 add(), remove(), element() 等方法。
一操作失敗時,會拋出例外
Queue 定義了自己的 offer(), poll(), pee,() 等方法。
一操作失敗時會傳回特定值
offer() 用來在佇列後端加入物件
成功→True, 失敗→false
poll() 取出佇列前端物件,若佇列為空則傳回 null.
peek() 取得(但不取出)佇列前端物件,若佇列為空則傳回 null.
//================================================================//
想對佇列的前端與尾端進行操作,在前端加入物件與取出物件,在尾端加入與取出物件, Queue 的子介面 Deque 就定義了這類行為。
addFirst(), removeFirst(), getFirst().
addLast(), removeLast(), getLast().
操作失敗時會傳回例外
offerFirst(), pollFirst(), peekFirst().
offerLast(), pollLast(), peekLast().
操作物敗時會傳回特定值
//================================================================//
排序收集的物件
java.util.Collection 提供有 sort() 方法,由於必須有索引才能進行排序,
因此 Collection 的 sort() 方法接受 List 實作的物件。
//================================================================//
//================================================================//
//MapDemo.java import java.util.*; public class MapDemo { public static void main(String args[]){ HashMap t = new HashMap(); t.put("A", "SCJP"); t.put(new Integer(100),new Integer(200)); t.put(new Object(),"SCBCD"); t.put(null, null); System.out.println(t.toString()); System.out.println("keyA:"+t.get("A")); System.out.println("keyB:"+t.get("B")); } }//================================================================//
//取間值 import java.util.*; import java.util.Map.Entry; public class MapkeyValue { public static void main(String args[]){ Map<String,String> map = new TreeMap<>(); map.put("one","一"); map.put("two","二"); map.put("three","三"); foreach(map.entrySet()); } private static void foreach(Iterable<Map.Entry<String,String>>iterable){ for(Map.Entry<String, String> entry:iterable){ System.out.printf("鑑%s 值%s %n", entry.getKey(), entry.getValue()); } } }//================================================================//
//Message.java import java.util.Map; import java.util.Scanner; import java.util.*; public class Messages { public static void main(String args[]){ Map<String,String> messages = new HashMap<>(); messages.put("Justin","Hello Justin的訊息"); messages.put("Monic","給Monic的禮物"); messages.put("Irene","Irene的喵喵叫"); Scanner scanner = new Scanner(System.in); System.out.print("取得誰的訊息"); String str = messages.get(scanner.nextLine()); System.out.println(str); System.out.println(messages); } }//================================================================//
//NewClass.java import java.util.*; public class NewClass { public static void main(String args[]){ Queue//================================================================//q = new LinkedList (); q.offer("First"); q.offer("Second"); q.offer("Third"); Object o; System.out.println(q.toString()); /* while((o = q.poll()) != null){ String s = (String)o; System.out.print(s+" "); }*/ while((o = q.peek()) != null){ //跑無窮迴圈 String s = (String)o; System.out.print(s+" "); q.remove(); } System.out.println(q.toString()); } }
//QueueDemo.java import java.util.*; public class QueueDemo { public static void main(String args[]){ Queue<String> q = new LinkedList<String>(); q.offer("SCJP"); q.offer("SCWCD"); q.offer("SCBCD"); System.out.println(q.toString()+" "); Iterator a = q.iterator(); while(a.hasNext()){ String s = (String)a.next(); System.out.print(s+" "); } } }//================================================================//
//RequestQueue.java import java.util.*; interface Request{ void execute(); } public class RequestQueue { public static void main(String args[]){ Queue requests = new LinkedList(); //模擬請求加入佇列 for(int i=1;i<6 execute="" i="" math.random="" n="" new="" null="" pre="" private="" process="" public="" request.execute="" request="(Request)requests.poll();" requests.offer="" requests.peek="" requests="" s="" static="" system.out.printf="" ueue="" void="" while=""> //================================================================// 練習: Link.java、LinkDemo.java、SimpleLinkedList.java//Link.java.java class Link{ private class Node{ Object o; Node next; Node(Object o){ this.o=o; } } private Node first; public void add(Object o){ Node last; if(first==null){ first=new Node(o); } else{ last=first; while(last.next!=null){ last=last.next; } last.next=new Node(o); } } public Object get(int index){ int size=size(); if(index>=size){ throw new IndexOutOfBoundsException(String.format("Index:%d, size:%d",index,size)); } int count=0; Node last=first; while(count<index){ last=last.next; count++; } return last.o; } public int size(){ if(first==null) return 0; Node last=first; int count=1; while(last.next!=null){ last=last.next; count++; } return count; } }//LinkDemo.java public class LinkDemo { public static void main(String args[]){ Link l = new Link(); String s0 = "hello-0"; String s1 = "hello-1"; String s2 = "hello-2"; String s3 = "hello-3"; l.add(s0); l.add(s1); l.add(s2); l.add(s3); System.out.println(l.size()); System.out.println((String)l.get(3)); System.out.println((String)l.get(0)); } }//SimpleLinkedList.java public class SimpleLinkedList { private class Node{ //將收集的物件用/vode封裝 Node(Object o){ this.o=o; } Object o; Node next; } private Node first; //第一個節點 public void add(Object o){ //新增一個Node封裝物件,並由上一個o Node物件參考 if(first == null){ first=new Node(o); } else{ Node last = first; while(last.next != null){ last=last.next; } last.next=new Node(o); } } public int size(){ //走訪所有Node計數並取得長度 int count=0; Node last=first; while(last.next != null){ last=last.next; count++; } return count; } public Object get(int index){ //走訪所有Node計數並取得對應索引順序 int size=size(); if(index > size){ throw new IndexOutOfBoundsException( String.format("Index: %d,Size: %d", index, size)); } int count=0; Node last=first; while(count < index){ last=last.next; count++; } return last.o; } }//================================================================//import java.util.*; class Account implements Comparable{ private String name; private String number; private int balance; Account(String name,String number,int balance){ this.name=name; this.number=number; this.balance=balance; } public String toString(){ return String.format("Account(%s %s %d)",name,number,balance); } public int comparTo(Object o){ Account other=(Account)o; return this.balance-other.balance; } @Override public int compareTo(Object o) { // TODO Auto-generated method stub return 0; } } public class Sort2 { public static void main(String arg[]){ List accounts=Arrays.asList( new Account("Justin","x1234",1000), new Account("Monic","x5678",500), new Account("Irene","x2345",100) ); Collections.sort(accounts); System.out.println(accounts); } }//================================================================////Stack.java import java.util.*; public class Stack { private Deque deque = new ArrayDeque(); private int capacity; public Stack(int capacity){ this.capacity=capacity; } public boolean push (Object o){ if(deque.size()+1 > capacity){ return false; } return deque.offerLast(o); } public Object pop( ){ return deque.pollLast(); } public Object peek(){ return deque.peekLast(); } public int size(){ return deque.size(); } public static void main(String args[]){ Stack stack = new Stack(4); stack.push("Justin"); stack.push("Lisa"); stack.push("John"); System.out.println(stack.pop()); System.out.println(stack.peek()); System.out.println(stack.size()); } }//================================================================//6>
沒有留言:
張貼留言