如何使用 arraylist 访问哈希映射键集
How to access to a hashmap keyset with arraylist
实际上,每次我想要一个键的位置时,我都会创建一个新的 ArrayList of keyset of LinkedHashMap。
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 创建 "link" 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;
}
提前致谢。 :)
使用 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;
}
如果您的动机是创建对象的轻量级,您可以考虑创建数组。
public int getId(int index) {
return (index <= ObjectsWithId.size()) ? (int) ObjectsWithId.keySet().toArray()[index-1] : -1;
}
顺便说一句:考虑将 number 参数重命名为 index 因为这是(我推测)您的意图。
实际上,每次我想要一个键的位置时,我都会创建一个新的 ArrayList of keyset of LinkedHashMap。
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 创建 "link" 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;
}
提前致谢。 :)
使用 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;
}
如果您的动机是创建对象的轻量级,您可以考虑创建数组。
public int getId(int index) {
return (index <= ObjectsWithId.size()) ? (int) ObjectsWithId.keySet().toArray()[index-1] : -1;
}
顺便说一句:考虑将 number 参数重命名为 index 因为这是(我推测)您的意图。