[Java] Treeset 에서 일치하는 Custom Class를 제거하는 방법?
조회수 1112회
기록을 관리하는 프로그램을 짜고 있는데요, TreeSet을 사용하고 있고 custom class는 'Man' 이라 하겠습니다. TreeSet에서 Man 을 정렬하는 방법은 compareTo method를 정의해서
`class Man implements Comparable {
private String name; private int gender;
(...)
public int compareTo(Man compare) { return this.name - compare.getName(); }
}`
이렇게 정렬까지는 된 상태인데요,
여기서 예를 들어:
- 이름을 입력한다 (String manName)
- 입력값과 이름이 일치하는 Man 을 TreeSet에서 제거한다 (TreeSet ManList)
- (이름은 중복되지 않는다. 모든 Man 은 unique)
이런 기능을 수행하려고 하는데 Data Structure를 공부할 때마다 막히는 부분이네요... ManList.remove(manName); 라고 하면 당연히 안 될테고, TreeSet에서 Iterator를 돌려서 찾아 없애자니 런타임이 초과될 것 같습니다. 이런 식으로 object의 attribute만 가지고 해당되는 instance를 찾아 자료구조에서 삭제하는 방법은 무엇이 있을까요?
bst 공부중이라 다른 자료구조 (해시맵 등)는 사용하지 않으려고 합니다!
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
그냥 단순 tree로는 어렵고 추가적인 장치가 필요합니다. 실예로 rdbms에는 인덱스라는 추가장치를 사용하고 있습니다.
예전에 검색해둔 자료인데... https://code.google.com/archive/p/indexed-tree-map/
상기의 자료를 분석해보세요.
- 감사합니다. 결국 Gender 별로 두 개의 트리를 만들어서 트리가 Man 클라스가 아니라 String 만 받도록 해서 해결했는데, 이 방법도 시도해보겠습니다 :) 알 수 없는 사용자 2017.2.11 10:32
댓글 입력