2012-11-09 6 views
0

이 데이터는 네트워크를 통해 전송되므로 로컬로 캐시해야합니다.이 데이터를 구조화하는 방법에 대한 조언?

Action (String) 
    Direction (String) 
     Frame (int) 
      X,Y (Point or int,int) 

사용법은 기본적으로 :

Point myPoint = data.get(action).get(direction).get(frame); 
myPoint.x; // do something with x and y 

내가 구조의이 거대한 해시 맵 유형 시도 :

데이터는 형식으로,

HashMaP<String, HashMap<String, HashMap<int, Point>>> 

이 작동하지만, 추악하고 오류가 생기기 쉽다.

나는 Classes로 분할하려고 시도했다. 하우스 키핑 코드가 많이 필요합니다.

누구나이 데이터 구조가 무엇인지 불렀는지, 어쩌면 나는 그것을 할 수있다.

제안 사항? "구조의 거대 해시 맵 유형 '암시

+4

수업에 어떤 문제가 있습니까? 어떤 "집 유지"코드가 있습니까? – Bohemian

+0

말마다 클래스가 잘못되어도 "하우스 키핑"이 잘못된 단어라고 생각됩니다. 어떻게 구조화/구성하겠습니까? 동작에는 방향이 포함되어 있으며 방향에는 해시 맵 이 포함되어 있습니까? – user1516346

+0

클래스 계층 구조를 제안하기 전에 각 항목과 부모 간의 관계를 설명해야합니다. '행동'은'방향'을 많이 가질 수 있는가? –

답변

4

엔티티 간의 관계이다

  • 방향이있는 인덱스'다수 '프레임 문자열 인 인덱스'다수 '방향

    • 동작은 문자열이며
    • 프레임은
    • 포인트

    하나의 간단한 approac은 구조에게 있습니다 인덱스 '많은'포인트의 숫자입니다 h는 'action' 'direction'과 'frame'을 포함하는 'key'객체를 정의하고이를 Map 구조에 사용하는 것일 수 있습니다.

    class PointKey { 
        String action, direction; 
        int frame; 
        PointKey(String action, String direction, int frame { .. init etc etc } 
    
    ... 
    

    사용 특성에 따라 당신도이 세 부분으로 키 기반의 일부 "합리적"고유 한 값을 제공하거나 다른 사람이 많은 양이있을 기대하는 경우 Comparable을 구현하기 위해 hashCode를 오버라이드 (override) 할 것 가치와 당신이 그들을 쓰는 것보다 더 읽고있을 것으로 기대합니다.

    그런 다음 당신은 당신의 Map 따라서 정의 :
    Map<PointKey,Point> data = new TreeMap<PointKey,Point>(); 
    

    Map<PointKey,Point> data = new HashMap<PointKey,Point>(); 
    

    또는

    가 선택한 방법에 따라.

    많은 양의 키를 만드는 경우 또 다른 걱정거리는 새 키를 만들어 임의로 액세스하는 것입니다. 이러한 경우에는 플라이급을 사용하는 것이 좋습니다.

    ... 
    // PointKey instance that is retained and used again and again, purely for 'access' purposes 
    dataKey.setIdentifiers(myAction, myDirection, myFrame); 
    Point myPoint = data.get(dataKey) 
    
  • 관련 문제