SCJP題庫第204題


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的大小有關。

Comments

Popular posts from this blog

Android-使用webview在V3版的Google地圖GPS定位