如何使用ArrayList访问hashmap Keyset



实际上,我每次想要键的位置时都创建一个linkedhashmap的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创建哈希图的密钥集的"链接"?我想每次想要一个键的位置时都不必创建一个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;
}

预先感谢。:)

如果您的动机对创建的对象轻巧,则可以考虑创建数组。

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

btw:考虑将 number 参数重命名为 index ,因为这是(我想)您的意图。

如何使用循环?

如果您不想创建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;
}

最新更新