잡담/궁금증 해결
heap vs TreeMap<key, list>
lms0806
2024. 5. 19. 18:07
728x90
반응형
treemap<String, ArrayList<String>());
vs
PriorityQueue<Node>
Node(String, String);
과연 어느게 더 메모리를 적게 먹고, 시간을 적게 소요할까요?
코드를 작성하는 와중에 단순 PriorityQueue에 데이터를 넣다보면, java heap memory error가 발생할 거 같다는 생각을 하게 되었습니다.
간단한 이유로는
하나의 바구니에 데이터를 모두 담는가 vs 여러 바구니에 나눠서 담는가 에 대하여 생각해보면 당연 후자가 더 효율적이라고 생각했기 때문입니다.
이를 증명하기 위하여 하나의 테스트과정을 거치게 되었습니다.
Map의 소스는 이러합니다.
Map<String, ArrayList<String>> map = new TreeMap<>();
for(int i = 0; i < 1000; i++) {
map.put(String.valueOf(i), new ArrayList<>());
for(int j = 0; j < 10000; j++) {
map.get(String.valueOf(i)).add(String.valueOf(j));
}
}
PriorityQueue의 소스는 이러합니다.
PriorityQueue<Node> pq = new PriorityQueue<>();
for(int i = 0; i < 1000; i++) {
for(int j = 0; j < 10000; j++) {
pq.add(new Node(String.valueOf(i), String.valueOf(j)));
}
}
class Node implements Comparable<Node>{
String time, name;
public Node(String time, String name) {
this.time = time;
this.name = name;
}
@Override
public int compareTo(Node o) {
return this.time.compareTo(o.time);
}
}
이 둘의 시간과 메모리를 측정하면 이렇습니다.
TreeMap<String, ArrayList<String>()>: | PriorityQueue<Node> | |
시간 | 634ms | 789ms |
메모리 | 691,384 | 690,264 |
처음 예상과는 다르게 차이가 메모리적인 차이는 별로 없다고 결과가 나오게 되었습니다.
그러나 시간적으로는 TreeMap이 조금 더 빠릅니다.
원래는 1,000 x 100,000 만큼 데이터를 늘려서 테스트하고자 하였으나, PriorityQueue에서 java heap space error가 발생하여 테스트해보지 못하였습니다.
추후에 해당 방식으로 구현을 해야한다면, TreeMap으로 구현할 거 같습니다.
728x90
반응형