2017-02-23 62 views
0

實際上,每次我想要一個key的位置時,我都會創建一個LinkedHashMap的keyset的新ArrayList。如何使用ArrayList訪問hashmap keyset

public static Map<Integer, Object> ObjectsWithId = new LinkedHashMap<>(); 


public int getId(int number) { 
    return (number <= ObjectsWithId.size()) ? new ArrayList<Integer>(ObjectsWithId.keySet()).get(number-1) : -1; 
} 

有沒有辦法用ArrayList創建HashMap的keyset的「連接」? 我想不必創建一個ArrayList每次我想要的位置的關鍵。

這裏是我想什麼,我想有:提前

public static Map<Integer, Object> ObjectsWithId = new LinkedHashMap<>(); 
public static ArrayList<Integer> ObjectsKeys = new ArrayList<Integer>(ObjectsWithId.keySet()); 

public int getId(int number) { 
     return (number <= ObjectsWithId.size()) ? ObjectsKeys.get(number-1) : -1; 
} 

感謝。 :)

回答

0

如果你的動機是創建的對象的輕量級,你可以考慮創建一個數組。

public int getId(int index) { 
    return (index <= ObjectsWithId.size()) ? (int) ObjectsWithId.keySet().toArray()[index-1] : -1; 
} 

BTW:考慮參數重命名爲指數因爲這是(我相信)你的意圖。

0

如何使用for循環?

如果你不想創建ArrayList,你可以嘗試下面的一個。

public int getId(int number) { 
    int position = 0; 
    int i = 0; 

    for (Map.Entry<Integer, Object> entry : ObjectsWithId.entrySet()) { 
     if (number == entry.getKey()) { 
      position = i; 

      break; 
     } else { 
      i++; 
     } 
    } 
    return position; 
}