如何使用arraylist访问hashmap键集

时间:2017-02-23 10:01:58

标签: java arraylist hashmap linkedhashmap keyset

实际上,每次我想要一个键的位置时,我都会创建一个新的LinkedHashMap键集的ArrayList。

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键集的“链接”? 我希望每次我想要一个键的位置时都不必创建一个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;
}

提前致谢。 :)

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

如果你的动机是创建对象的轻量级,你可以考虑创建一个数组。

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

BTW:考虑将数字参数重命名为 index ,因为这是(我推测)你的意图。