2013-06-05 2 views
0

나는 guestbookEntries이 포함 된 treeMap입니다. 키는 순서 지정 및 페이지 매김에 사용됩니다. 항목을 삭제할 때 guestbookEntriessize()이 줄어들어, 예를 들어 guestbookEntries.size() + 1 키를 사용하여 새로운 항목을 작성하기 때문에 게시물이 덮어 쓰게된다는 문제점이 있습니다.Reorder TreeMap after remove()

변경하려면 키 값 쌍을 제거 할 때 내 TreeMap을 다시 정렬하고 싶습니다. 다음 모든 키의 수가 1 씩 감소하므로 TreeMap 내에 "갭"이 없어야 guestbookEntries.size()이 다시 정확합니다.

나는 이런 식으로 생각했다. 여기서 postNumber은 제거 된 항목의 키이다.

for(int i = postNumber; i < guestbookEntries.size(); i++) { 
      Guestbook gb = guestbookEntries.get(i + 1); 
      guestbookEntries.put(postNumber, gb); 
      guestbookEntries.remove(postNumber + 1); 
} 

더 쉬운 방법이 있습니까?

+0

이 질문에 대한 대답은 아니지만 TreeMap을 사용하는 이유는 무엇입니까? 왜 방명록 배열 (또는 ArrayList)? – Thierry

+0

자동으로 주문 되었기 때문에 처음에 사용했습니다. – mgerstner

답변

1

이 솔루션은 실제로 매우 나쁜 아이디어라고 생각합니다. 방명록에 게시물의 번호 매기기를 만들고 싶다고 상상해보십시오. 다른 사람이 해당 게시물을 id으로 참조하고 싶습니다. 그러나 게시물을 다시 이동하면 자신의 게시물을 줄이면 id 님은 해당 게시물에 대한 게시물을 원할 것입니다.

누군가가 게시물 # 0을 삭제하고 이미 방명록에 100,000 개의 게시물이 있다고 가정 해보십시오. 그런 다음 프로그램은 트리 맵에서 99,999 개의 개체를 이동시켜 번호를 줄여야합니다.

이 경우 유일한 해결책은 새 게시물의 ID를 생성 할 때 guestbookEntries.size() + 1을 사용하지 마십시오.

정적 정수 필드를 만드는 대신, 동시 준비 클래스를 사용하는 것이 좋습니다 (예 : AtomicInteger). 새 게시물에 대한 id를 해결하기 위해해야 ​​할 것

static AtomicInteger postIdGenerator = new AtomicInteger(0); 

있는 유일한 방법입니다 : postIdGenerator.incrementAndGet().