SCJP 1.6版考題 204

出自 陳富國維基館
於 2013年3月27日 (三) 17:03 由 Ikk (對話 | 貢獻) 所做的修訂 (新頁面: Given: <br>11.  public class Person{ <br>12.            private name; <br>13.            public Person(String name){...)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
前往: 導覽搜尋

Given:
11.  public class Person{
12.            private name;
13.            public Person(String name){
14.                           this.name = name;
15.            }
16.            public int hashCode(){
17.                           return 420;
18.            }
19. }


Which statement is true? //那一個敘述是正確的?

  A. The time to find the value from HashMap with a Person key depends on the size of the map.
      用一個Person的鍵值從HashMap 找一筆資料的時間取決於map的大小。
  B. Deleting a Person key from a HashMap will delete all map entries for all keys of type Person.
     從HashMap 中刪除掉一個Person的鍵值將會刪除對型態為Person的全部鍵值的所有對映(map)的入口。
  C. Inserting a second Person object into a HashSet will cause the first Person object to be removed as a duplicate.
    插入一個第二個Person物件到HashSet中將會導致第一個Person物件被當成重複而被移除。
  D. The time to determine whether a Person object is contained in a HashSet is constant and does NOT depend on the size of the map.
   決定一個Person物件是否存在於一個HashSet的時間是一個常數時間,並且不是取決於map的大小。


解答


Ans: A

解說: 雜湊是用HashCode(雜湊值)來當成map的入口索引,使用湊雜的原則是不同的物件算出來的雜湊值要儘量避免一樣,
         如果一樣,也就代表不同的物件其map中的索引入口一樣,這些不同的物件但因雜湊值一樣,
         會被map以線性的方式串起來,也就是說,若要找一個物件,是計算其雜湊值找出map的入口(entry),
         如果這個入口的物件不只一個,那就要用線性搜尋的方式一個一個去找。
         在這個題目,Person的鍵值(HashCode)產生都是常數值,420,這樣會導致所有的Person物件都會被串到420這個map入口,
         尋找物件是否存於這個map的時間要看有多少的物件在裏面,也就是說,找尋的時間跟map的大小有關。