所有項目

2011年5月26日 星期四

5月20號上課,234 ~242。

234 ~242

No.234
        這題目事實上還蠻好判斷的,第一先了解 import這個東西,在這個網頁可以清楚的解釋(http://www.javaworld.com.tw/jute/post/view?bid=29&id=9552&sty=1&tpg=1&age=-1)、另一個網頁上有講static import的規則(http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/StaticImport.htm)。我的判斷方法是這樣:這題目要 insert code class Demo裡面,因為是要使用static方法。所以先將答案 A C移除,但沒有static import這樣寫法 再來移除 B,D,G。現在就只剩下 E,F。但E. import Utils.Repetition.twice()→這個有問題,因為匯入並不可以把方法給匯入,import是匯入類別。這題最大的問題就是 twice()這個。答案只剩下 F


No.235
        這個題目簡單,陣列中放了這三個值。然後 這列的長度是三,陣列[0]的值給了一null,所以 elements[0]

No.236()

No.237 No.203一樣 看前面的解說就可知道。

No.238 拖拉題

No.239
        這題目是考套件(collection)。先要知道:poll peek這兩個方法(http://nothing.tw/JDK_API_1_6/java/util/Queue.html#poll())
我練習的code:
import java.util.*;
public class PQ {
    public static void main(String[] args){
        PriorityQueue<String> pq= new PriorityQueue<String>();
        pq.add("carrot");
        pq.add("apple");
        pq.add("banana");
//    System.out.println(";"+pq.peek()+";"+pq.peek()+";"+pq.peek()+";"+pq.peek()+";"+pq.peek());
//    System.out.println(";"+pq.poll()+";"+pq.poll()+";"+pq.poll()+";"+pq.poll()+";"+pq.poll());
//  System.out.println(pq.poll()+";"+pq.peek());
    }
}
把這兩個註記交換拿掉  就會發覺它們的差異性。
補充了解:柱列有分,後進先出:Last in first out (LIFO)和 先進先出First Input First Output(FIFO)。簡單紀錄:Peek不會移除值,poll會移除值。
所以答案是:apple;banana 答案C
補充:這行(PriorityQueue<String> pq= new PriorityQueue<String>();)是有自然排序的效果,詳細解說(http://nothing.tw/JDK_API_1_6/java/util/PriorityQueue.html)。再次說明一下PriorityQueue這個:預設是自然排序法則,可是compare()來改變,因為 compare()抽象方法 將該物件放到 PriorityQueue()建構子中。 

No.240
        這題是考說,要執行add(0,object)這物件,可是不希望是快速隨機,而是希望有順序的存取。所以先來解釋幾個元件:
Queue:柱列堆疊
Linked List:處理經常變動元素排列順序時,效率較佳
ArrayList:處理循序加入以及存取元素方面,效率較佳
LinearList:這個老大是說 這是線性。(我自己找不到這資料)
所以這四個裡面可以知道 Linked List是 串聯,所以一步一步來。

No.241
        這一題就是在講overright(覆寫),overload(多載)這兩個,遇到這題目後才知道這兩個到底是做甚麼,所以去找了一下書(徹底征服 SCJP 6.0 認證,文魁出版)。這本書裡有 比較 overright overload的說明。順便跟大家分享一下:
比較
覆寫函數(override)
多載函數(overload)
存取修飾子
只能大於等於原函式的存取修飾子
可以不同於原函式的存取修飾子
參數
必須相同,如果不同就是多載
必須不同,如果相同就是覆寫覆寫
回傳型別
必須相同,一旦函式名稱與參數跟父類別相同者視為覆寫父類別函式,此時如果回傳型別與原函式不同者會產生編譯錯誤。
可以不同。
異常
不能拋出新的,或者是更大(繼承樹上)的受控異常;但是可以拋出任何範圍更小(繼承樹上)的受控制異常,或者是任何的非受控制異常(指的是RuntimeException)
可以不同
函式呼叫選擇
物件型別(heap中的實體物件型別)決定呼叫的是父類別函式還是子類別函式(產生多形效應)。有繼承關西才會有。
參考型別(宣告型別)決定呼叫哪個多載函式,編譯時期會檢查該參考型別是否存在該多載函式,而不論物件型別是否有定義該多載函式,所以沒有多行效應。本類別中多個函數(沒有繼承關西)
再來看這題目的答案:
A.是說這題沒有override。正確的,因為她只有overload,這個就可以看第4 (person p),不過他的父類別(equals)(object o),所以顯然沒有 覆寫 只有 多型的 覆載。
B.題目是說第五行不能執行,怎麼不能執行,實際上想要混淆我們,雖沒有override但有overload.
C.這個也不對。
D.是說 Person object物件加入會比對 equals,實際上處了equals外 還有 hashset也會處理。

No.242
        hashCode 這個東西  我還在了解中。所以沒有辦法詳解。老大有介紹一個網頁(http://edu.codepub.com/2009/0924/15728.php)這網頁中有介紹hashcode()和equals()。
反正 hashCode是 檢查 是否一樣 並不會去判斷 有沒有不一樣,hostCode是獨一無二的,所以答案A錯了。
SortedSet collection並不是用 hashCode,正確因該是 TreeSet,排序是用 comparable才對。所以B這答案錯了。
D這個答案錯在:hashCode的特徵並不是 Gaussian distribution(高斯分布圖),而是unitoru

沒有留言:

張貼留言