2011-11-30 2 views
1

필자는 구문 분석하고 싶은 비교적 큰 텍스트 파일 (~ 4m 라인)을 가지고 있으며 데이터를 저장할 적절한 데이터 구조에 대한 조언을 찾고 있습니다. 이 파일은 같은 줄이 포함 된 다음대용량 데이터 파일 구문 분석에 적합한 자바 데이터 구조

나는 그룹에 원하는
Date  Time Value 
2011-11-30 09:00 10 
2011-11-30 09:15 5 
2011-12-01 12:42 14 
2011-12-01 19:58 19 
2011-12-01 02:03 12 

날짜별로 선이 나의 최초의 생각이 라인의 나머지 부분에 날짜를 매핑 할 TreeMap<String, List<String>>을 사용하는 것이었다 그러나 TreeMapList SA 말도 안돼 해야 할 일? 나는 문자열 객체를 날짜 객체로 대체 할 수 있다고 생각한다. (너무 많은 문자열 비교를 없애기 위해) 그러나 List은 내가 부적절하다고 생각하는 값이다.

날짜순으로 키를 반복하기 때문에 TreeMap을 사용하고 있습니다.

답변

1

의 목록은 우스운 일입니까?

가 개념적으로,하지만이 될 것입니다없는 매우 메모리 비효율적 인 (모두 때문에 Map의와 List의 때문에). 200 % 이상의 오버 헤드가 있습니다. 얼마나 많은 메모리를 낭비해야하는지에 따라 허용 될 수도 있고 그렇지 않을 수도 있습니다.

더 효율적인 메모리 솔루션을 만들려면 모든 열 (Date 포함)에 대한 필드가있는 클래스를 만들고 List에 모두 넣고 (이상적으로는 quicksort를 사용하여) 읽은 후에 정렬하십시오.

+0

공정하게 말하면지도의 메모리 오버 헤드는 키 배포에 따라 조금씩 다릅니다. 많은 키가 여러 번 재사용되면 메모리를 절약 할 수도 있습니다. – Ingo

+0

'List'를 값으로 사용하는 것이 얼마나 비효율적입니까? 값으로 사용할 별도의 클래스를 만든 다음 해당 클래스에'List'를 저장하면 여전히 동일한 수의'Lists '가 생성됩니다. – Michael

1

목록 사용에 대한 이의가 없습니다. 귀하의 경우에는 아마도지도의 값으로 List<Integer>이 적합 할 지 모르지만.

+0

그리고 날짜와 시간을 목록 요소에 어떻게 맵핑합니까? – CKuck

+0

물론'Map'을 통해. 동일한 키 아래에있는 목록의 모든 요소는 정확히 해당 데이터/시간을가집니다. – Ingo

+0

죄송합니다. 데이터의 작은 샘플 만 포함되었으므로 날짜, 시간 및 값보다 많은 행이 있습니다. 귀하의 제안을 주셔서 감사합니다 :) – jackbot

2

ListMap의 값으로 사용하면 아무런 문제가 없습니다. 그 모든 것들은 추한 것처럼 보이지만 제네릭 클래스 안에 제네릭 클래스를 두는 것은 완벽합니다.

String을 키로 사용하는 대신 키가 날짜이기 때문에 java.util.Date을 사용하는 것이 좋습니다. 그러면 TreeMap에서 더 정확하게 날짜를 정렬 할 수 있습니다. Strings으로 날짜를 저장하면 TreeMap은 날짜를 올바르게 정렬하지 않을 수 있습니다 ("실제"날짜가 아닌 문자열로 정렬됩니다).

Map<Date, List<String>> map = new TreeMap<Date, List<String>>(); 
관련 문제