Java为数据结构中的映射定义了一个接口java.util.Map,它有HashTable、HashMap、WeakHashMap、LinkedHashMap以及TreeMap等实现类。
使用映射的技术要点如下:
HashMap是一个最常用的Map,它根据键的hashCode值存入数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap是无序的,则由iterator迭代出来的值是无序排列。HashMap最多只允许一条记录的键为null,多插入空键记录,数据会出现问题;允许多条记录的值为null;HashMap不支持线程的同步。如果需要同步,可以用Collections的synchronized方法使HashMap具有同步能力;
HashTable实现一个映射,所有的键值必须非空,为了能高效地工作,定义键的类必须实现hashCode()方法和equals()方法。HashTable是无序的,但是运用迭代默认以倒序输出元素。HashTable支持线程同步,即任一时刻只能有一个线程能写hashtable,因此导致HashTable在写入时会比较慢;
TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用迭代器Iterator遍历TreeMap时,得到的记录是排过序的。
该次笔记只是简单介绍一下映射类HashTable、HashMap和TreeMap,并对各映射类进行比较。
源代码:
package corejava; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; /** * * 测试Map * **/ public class TestMap { public static void showHashMap(){ Map<String, String> hashMap=new HashMap<String, String>(); hashMap.put("001", "藻类植物"); hashMap.put("002", "菌类植物"); hashMap.put("003", "地衣类植物"); hashMap.put("004", "蕨类植物"); hashMap.put("005", "种子植物"); hashMap.put("006", null);//HashMap中允许多个value值为空 hashMap.put(null, "苔藓植物");//HashMap只允许一个key为空,否则 Iterator<String> it=hashMap.keySet().iterator();//把hashMap的key值集合放到迭代器里,获得key值集合的迭代器 System.out.println("1.操作HashMap显示植物种类"); while(it.hasNext()){ Object key=it.next();//获取每个键KEY值 System.out.print(hashMap.get(key)+"\t"); } System.out.println(""); } public static void showHashtable(){ Hashtable<String, String> hashTable=new Hashtable<String, String>(); hashTable.put("001", "藻类植物"); hashTable.put("002", "菌类植物"); hashTable.put("003", "地衣类植物"); hashTable.put("004", "蕨类植物"); hashTable.put("005", "种子植物"); Iterator<String> it=hashTable.keySet().iterator();//把hashTable的key值集合放到迭代器里,获得key值集合的迭代器 System.out.println("2.操作hashTable显示植物种类"); while(it.hasNext()){; Object key=it.next();//获取每个键KEY值 System.out.print(hashTable.get(key)+"\t"); } System.out.println(""); } public static void showTreeMap(){ TreeMap<String, String> treeMap=new TreeMap<String, String>(); treeMap.put("001", "藻类植物"); treeMap.put("002", "菌类植物"); treeMap.put("003", "地衣类植物"); treeMap.put("004", "蕨类植物"); treeMap.put("005", "种子植物"); treeMap.put("006", null);//treeMap中允许value值为空 treeMap.put("007", null); Iterator<String> it=treeMap.keySet().iterator();//把treeMap的key值集合放到迭代器里,获得key值集合的迭代器 System.out.println("3.操作treeMap显示植物种类"); while(it.hasNext()){; Object key=it.next();//获取每个键KEY值 System.out.print(treeMap.get(key)+"\t"); } System.out.println(""); } public static void showArrayList() { ArrayList<String> arraylist=new ArrayList<String>(); arraylist.add("001藻类植物"); arraylist.add("003地衣类植物"); arraylist.add("006苔藓植物"); arraylist.add("004蕨类植物"); arraylist.add("005种子植物"); arraylist.add("002菌类植物"); System.out.println("4.排序前植物种类"); for (int i = 0; i < arraylist.size(); i++) { System.out.print(arraylist.get(i)+"\t"); } System.out.println(); Collections.sort(arraylist);//对列表集合进行排序 System.out.println("5.排序后植物种类"); for (int i = 0; i < arraylist.size(); i++) { System.out.print(arraylist.get(i)+"\t"); } System.out.println(); } public static void main(String[] args) { showHashMap();//操作HashMap显示植物种类 showHashtable(); showTreeMap(); showArrayList();//再次加入arraylist是与Map类做个比较 } }