码迷,mamicode.com
首页 > 编程语言 > 详细

java 集合框架之 Map

时间:2018-06-06 21:41:35      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:大致   hashmap   图片   空间   bst   技术   java 集合   红黑树   结构   

show Me the code!

常用的Map 下 有treeMap,hashmap,hashtable,linkhashMap,下列代码就对以上四种做了比较 并简单说明其底层实现。

public class MyMap {
    public static void testaddTreeMap(){
        TreeMap<String,Object> treeMap = new TreeMap<String, Object>();
        treeMap.put("赵云",23);
        treeMap.put("曹操",24);
        treeMap.put("马超",25);
        treeMap.put("司马懿",26);
        treeMap.put("2",0);
        treeMap.put("1",0);
        treeMap.put("3",null);
        for(Map.Entry<String, Object> entry : treeMap.entrySet()) {
            System.out.println(entry.getKey() + ": " +entry.getValue());
        }
    }
    public static void testHashMap(){
        Map<String, Object> hashMap = new HashMap<String, Object>();
        hashMap.put("赵云",23);
        hashMap.put("曹操",24);
        hashMap.put("马超",25);
        hashMap.put("司马懿",26);
        hashMap.put(null,null);
        for(Map.Entry<String, Object> entry : hashMap.entrySet()) {
            System.out.println(entry.getKey() + ": " +entry.getValue());
        }
    }
    public static void testLinkedHashMap(){
        LinkedHashMap<String,Object> linkedHashMap = new LinkedHashMap<String, Object>();
        linkedHashMap.put("赵云",23);
        linkedHashMap.put("曹操",24);
        linkedHashMap.put("马超",25);
        linkedHashMap.put("司马懿",26);
        linkedHashMap.put(null,null);
        linkedHashMap.put("2",1);
        linkedHashMap.put("1",1);
        for(Map.Entry<String, Object> entry : linkedHashMap.entrySet()) {
            System.out.println(entry.getKey() + ": " +entry.getValue());
        }
    }
    public static     void  testHashTable(){
        Hashtable<String,Object> hashtable = new Hashtable<String, Object>();
        hashtable.put("赵云",23);
        hashtable.put("曹操",24);
        hashtable.put("马超",25);
        hashtable.put("司马懿",26);
//        hashtable.put(null,null);
        for(Map.Entry<String, Object> entry : hashtable.entrySet()) {
            System.out.println(entry.getKey() + ": " +entry.getValue());
        }
    }
    public static void main(String[] args) {
        System.out.println("--hashMap  --:特点:无序,非线程安全,父类:AbstractMap- 允许 null  key/value");
        MyMap.testHashMap(); //底层实现:是散列表(数组配合单链表实现),通过hashCode 定位存入某个存储空间
System.out.println("--HashTable --特点:无序,线程安全,父类dirtory,禁止 null key/value"); MyMap.testHashTable(); //底层实现与hashMap一致 只是在所有方法上加了synchronized
System.out.println("-linkHashMap--特点:有序!(这里的有序不是指排序!而是根据插入的顺序返回) 非线程安全, 父类hashMap 允许 null key/value"); MyMap.testLinkedHashMap();//与hashMap的实现一致,唯一不同采用了双向循环链表,加入before指针,所以可以轻易的找到上一个节点实现有序
System.out.println("--treeMap --特点:key值有序 非线程安全 父类:AbstractMap 允许value为null key 禁止为null"); MyMap.testaddTreeMap();// 底层实现是平衡二叉树(红黑树)对key 进行排序 如果需要key 有序即可使用,这里多给treeMap 设置一个2与1的key 结果表明对key进行了排序 } }

 

hashMap 底层数据结构展示图

技术分享图片

hashMap 是由数组与单链表组合而成,而linkhashmap 大致与上相同,但唯一不同他采用的双向循环链表所以,除了上图的next 还有个before 所以这样就可以找到前一个元素实现有序。

java 集合框架之 Map

标签:大致   hashmap   图片   空间   bst   技术   java 集合   红黑树   结构   

原文地址:https://www.cnblogs.com/lanSeGeDiao/p/9146433.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!