2016-06-16 5 views
-1

을 삭제하지 않고 기존 항목을 수정 그래서 나는지도자바지도/트리 맵 : 항목

Map<Integer, Object[]> data = new TreeMap<Integer, Object[]>(); 

로 정의하고 난을 통해 내가 루프로 데이터를 추가하고 텍스트 파일을 읽을 수 있어요. 대부분의 데이터는 추가하고 계속 진행합니다. 그러나 기존 항목을 삭제하거나 위치를 제거하지 않고 다시 적용해야하는 파일에는 데이터가 있습니다. 예. 내가 나중에 데이터가 기대 항목을 추가한다면

data.put(counter, new Object[] {ex1, ex2, ex3, ex4}); 

그래서, 추가해야합니다 (편집 :이 추가 될 수있다), 새로운 데이터를 기존 데이터를 유지하고 추가하는 방법이? 예.

첫째,

data.put(counter, new Object[] {"testData1", "testData2", "testData3", "testData4"}); 

데이터가 원래 추가되었을 때 내가 추가해야 데이터에 대한 루프, 난 단지 카운터의 값을 알고있는 상태에서 최종 위치로 "testData5"를 추가 할 수 있어야

.

특정 항목의 기존 데이터를 삭제하지 않고이를 수행 할 수있는 방법이 있습니까?

편집 : 데이터를 추가 할 수 있으며 이에 대한 변경 사항이 있습니다.

+0

그래서 당신은 데이터의 세 번째 요소에 배치되어야 함을 알 수있는 방법이 없습니다 이 예제에서 배열? – Zircon

+0

귀하의 질문을 이해하고 있는지 확실하지 않습니다. 수정해야 할 요소가 추가 될 수는 있지만 다른 모든 정보는 보존해야합니다. – Racehorse35

+4

어레이 대신 목록을 사용하는 것이 어떻습니까? –

답변

1

배열을 사용하면 상당히 엉망입니다. 나는 목록을 사용해야한다는 의견에 동의한다. 목록 참조 만 사용하면지도에 아무 것도 다시 설정할 필요가 없다는 것에 동의한다.

사용하여 배열 (음란!)

while(/* fancy argument */) { 
    int counter; //you promised me this 
    String argument; //and this 

    Object[] foo = data.get(counter); //find what is stored on the map 
    Object[] bar; //our expected result 

    if(foo == null) { //create a new array and append it 
     bar = new Object[1]; 
     bar[0] = argument; 
    } 
    else { //fill the new array 
     bar = new Object[foo.length+1]; 
     for(int i = 0; i < foo.length; i++) { 
      bar[i] = foo[i]; 
     } 
     bar[foo.length] = argument; 
    } 

    data.set(counter, bar); //put the updated array into the map 
} 

사용 목록 (클린!)

while(/* fancy argument */) { 
    int counter; //you promised me this 
    String argument; //and this 

    List<Object> foo = data.get(counter); //find what is stored on the map 
    //and we don't need bar since we can play with foo 

    if(foo == null) { //we have a new list we need to add 
     foo = new ArrayList<>(); 
     data.set(counter, foo); //put it in the map 
    } 

    foo.add(argument); //add to list, don't need to re-put since it's already there 
}