实际上,每次我想要一个键的位置时,我都会创建一个新的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;
}
提前致谢。 :)
答案 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 ,因为这是(我推测)你的意图。