2017-02-23 15 views
0

사실, 키의 위치를 ​​원할 때마다 LinkedHashMap의 키 세트의 새로운 ArrayList를 만듭니다.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; 
} 

HashMap의 키 집합과 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; 
} 

감사 : 여기

내가 뭘하려하고 내가 가지고 싶은 것입니다. :)

답변

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; 
}