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>

沒有留言:
張貼留言