2016-08-28 8 views
0

내 프로그램은 로그를 검색하고 이벤트 발생 횟수 (각 이벤트와 관련된 바이트 포함)를 계산합니다. 관심있는 이벤트를 (key, value1, value2)로 저장하고 싶습니다. 여기서 문자열은 키이고 값은 두 개의 long입니다. 구조에 키 alrady가 있는지 검색 할 수 있어야하며 두 개의 long 값을 수정할 수 있어야합니다.Java에서 생성, 검색 및 수정하는 가장 좋은 방법 (key, value1, value2)

데이터베이스 경로로 이동하거나 다른 텍스트 파일에 데이터를 저장하지 않을 것입니다.

스택 오버플로 검색을 사용하여 무언가를 찾지 못했으며 오라클 자습서 및 모음 설명서가 도움이되지 않았습니다. 내 옵션 (I 그것을 이해)입니다

  1. (I 다시 걷고에 문자열과를 희롱) (문자열, 배열)
  2. 2 차원 배열
  3. 튜플 객체
구성된지도

우수한 다른 가능한 솔루션을 간과하고 있습니까? 그리고 그렇지 않다면, 당신은 내가 사용하도록 제안합니까?

미리 감사드립니다.

+0

해시 맵이 단순히 작업을 수행하지 않는 이유는 알 수 없습니다. 복잡한 것 같지 않습니다. –

+0

@VicSeed는 오라클 워드 프로세서가 "각 키는 최대 하나의 값으로 매핑 할 수 있습니다"라고 말하면서 두 값으로 매핑 할 키가 필요합니다. http://docs.oracle.com/javase/6/docs/api/java/util/Map.html을 참조하십시오. 나는 문자열 키와 튜플이있는 길을가는 길이라고 생각한다. (Aaron Davis의 대답). – Mike

+0

네, 그게 간단한 해시 맵의 의미입니다. 값의 튜플을 저장하거나 값을 저장하는 것은 크게 다르지 않습니다. –

답변

2

당신이 "최고"라는 말을하기 란 어렵지만, 이것이 내가하는 일입니다. 나는 문자열 키와 단순한 튜플 객체 인 값을 갖는 맵을 가질 것이다. "수동"으로 성능을 향상시킬 수는 있지만 맵의 컬렉션 구현을 사용하는 것이 가장 쉽고, 더 중요한 것은 나중에 다른 사람들이 나중에 읽고/유지해야 할 사람을 이해하는 것이 가장 쉽습니다. 또한 조숙 한 최적화를 조심하십시오. :-)

0

똑같이 바람직하지 않은 경우 # 2의 옵션은 128 비트 BigInteger을 사용하는 것입니다.

// set 
map.put(key, new UUID(value1, value2); 
// get 
value1 = map.get(key).getMostSignificantBits(); 

가장 "적절한"솔루션은 일반적으로를 작성하는 것입니다 : 더 나은 옵션은 여전히 ​​조금 해키하지만, 그것은 쉽게 높고 낮은 긴 값에 액세스 할 수있는하는 UUID를 사용하는 것 값이 나타내는 것과 전달되는 방식을 전달하는 맞춤 클래스입니다. 관계가없고 공통 키를 공유하는 경우 각 값 집합에 대해 별도의지도를 유지하는 것이 좋습니다.