LKWH:
回答:HashMap与HashTabel都是以键值对的方式存取的集合类型,不同的是HashTable实现了线程同步,具有安全性,而HashMap未实现线程同步,不安全,但存取效率相对较高。
2.HashMap与TreeMap与LinkedHashMap区别?
HashMap通过hashCode对其内容进行快速查找,而TreeMap中所有元素都保持着某种固定的顺序,如果需要得到有序的集合应该用TreeMap。
LinkedHashMap保存了记录的插入顺序,先插入的先遍历到 TreeMap默认是按升序排,也可以指定排序的比较器。遍历的时候按升序遍历。 例如:a是LinkedHashMap,b是TreeMap。 a.put("2","ab"); a.put("1","bc"); b.put("2","ab"); b.put("1","bc"); 那么遍历a的时候,先遍历到key是2的,因为2先放进去。 遍历b的时候,先遍历到“1”,因为按顺序是先1后2
- Map map = new TreeMap();
- //TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好
- Map map = new LinkedHashMap();
- //LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列.
- Map map = new HashMap();
- //HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。
点击(此处)折叠或打开
- package cn.com.map;
- import java.util.HashMap;
- import java.util.Hashtable;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.TreeMap;
- public class HashMaps {
- public static void main(String[] args) {
- Map<String,String> map = new HashMap<String,String>();
- map.put("a", "aaa");
- map.put("b", "bbb");
- map.put("c", "ccc");
- map.put("d", "ddd");
-
- Iterator<String> iterator1 = map.keySet().iterator();
- while(iterator1.hasNext()) {
- Object key = iterator1.next();
- System.out.println("map.get(key) is " + map.get(key));
- }
- System.out.println(" ");
-
- //定义HashTable
- Hashtable<String,String> tab = new Hashtable<String,String>();
- tab.put("a", "aaa");
- tab.put("b", "bbb");
- tab.put("c", "ccc");
- tab.put("d", "ddd");
-
-
- Iterator<String> iterator2 = tab.keySet().iterator();
- while(iterator2.hasNext()) {
- Object key = iterator2.next();
- System.out.println("tab.get(key) is " + tab.get(key));
- }
- System.out.println(" ");
-
- //定义TreeMap
- TreeMap<String,String> tmp = new TreeMap<String,String>();
- tmp.put("a", "aaa");
- tmp.put("b", "bbb");
- tmp.put("c", "ccc");
- tmp.put("d", "ddd");
-
-
- Iterator<String> iterator3 = tmp.keySet().iterator();
- while(iterator3.hasNext()) {
- Object key = iterator3.next();
- System.out.println("tmp.get(key) is " + tmp.get(key));
- }
- }
- }
- 结果为:
- map.get(key) is ddd
- map.get(key) is bbb
- map.get(key) is ccc
- map.get(key) is aaa
-
- tab.get(key) is bbb
- tab.get(key) is aaa
- tab.get(key) is ddd
- tab.get(key) is ccc
-
- tmp.get(key) is aaa
- tmp.get(key) is bbb
- tmp.get(key) is ccc
- tmp.get(key) is ddd
3.HashMap底层如何实现?
HashMap底层采用的是Hash表来实现的。
例如get(object key)方法,要取得key所检索的value。
1 检索的过程如下:
先得到key的hashcode(),得到code,然后根据这个code的值利用一个hash函数得到一个哈西值index,用这个index去检索哈什表,index指的位置就是value所在的位置。
2 如何判断key是否相等。
由于效率的考虑(因为,equals方法判断起来比较复杂,例如需要强制类型转换),所以先判断hashcode编码是否相同,如果相同再判断equals方法。
这也说明了,当用object作为key进行索引的时候,为什么重写了equals的方法,还要重新hashcode()的方法,因为仅仅equals了,但是hashcode不同,也不相等。
例如get(object key)方法,要取得key所检索的value。
1 检索的过程如下:
先得到key的hashcode(),得到code,然后根据这个code的值利用一个hash函数得到一个哈西值index,用这个index去检索哈什表,index指的位置就是value所在的位置。
2 如何判断key是否相等。
由于效率的考虑(因为,equals方法判断起来比较复杂,例如需要强制类型转换),所以先判断hashcode编码是否相同,如果相同再判断equals方法。
这也说明了,当用object作为key进行索引的时候,为什么重写了equals的方法,还要重新hashcode()的方法,因为仅仅equals了,但是hashcode不同,也不相等。
4.对哪些数据结构比较了解?
5.对哪些设计模式与框架比较了解?
相关热门文章
给主人留下些什么吧!~~
评论热议