2017-02-23 61 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; 
}