基于平衡二叉树实现Map
public class AVLTreeMap<K extends Comparable<K>,V> implements IMap<K,V> { private AVLTree<K,V> avl; public AVLTreeMap(){ avl = new AVLTree<K,V>(); } public void add(K key, V value) { avl.add(key,value); } public V remove(K key) { return avl.remove(key); } public boolean contains(K key) { return avl.contains(key); } public V get(K key) { return avl.get(key); } public void set(K key, V newValue) { avl.set(key,newValue); } public int getSize() { return avl.getSize(); } public boolean isEmpty() { return avl.isEmpty(); } }
三种Map的比较
public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); String[] arr = {"张三", "李四","王五", "赵六","张三丰","李思明","王老五","赵明"}; for(int i = 0; i < 10; i++){ for(String str : arr){ String key = str +i; list.add(key); } } for(int i = 0; i < 15000; i++){ for(String str : arr){ String key = str +i; list.add(key); } } System.out.println("准备的数据数量=" + list.size()); System.out.println("-------------------------------"); AVLTreeMap<String, Integer> map3 = new AVLTreeMap<String, Integer>(); double time3 = testMap(map3, list); System.out.println("平衡二叉树花费" + time3); System.out.println("-------------------------------"); BinarySearchTreeMap<String, Integer> map2 = new BinarySearchTreeMap<String, Integer>(); double time2 = testMap(map2, list); System.out.println("二分搜索树花费" + time2); System.out.println("-------------------------------"); LinkedListMap<String, Integer> map1 = new LinkedListMap<String, Integer>(); double time1 = testMap(map1, list); System.out.println("链表Map花费" + time1); System.out.println("-------------------------------"); }
输出结果如下:可以发现平衡二叉树时间比二分搜索树还短。
准备的数据数量=120080
-------------------------------
Map size: 120000
张三0出现的次数:2
平衡二叉树花费0.097201387
-------------------------------
Map size: 120000
张三0出现的次数:2
二分搜索树花费0.10165089
-------------------------------
Map size: 120000
张三0出现的次数:2
链表Map花费100.172040309
-------------------------------