【Java集合之Map】HashMap、HashTable、TreeMap、LinkedHashMap区别

388 篇文章 482 订阅 ¥19.90 ¥99.00

在这里插入图片描述

Java为数据结构中的映射定义了一个接口java.util.Map,它有四个实现类,分别是HashMap、HashTable、LinkedHashMap和TreeMap。本节实例主要介绍这4中实例的用法和区别

几种Map类结构

public class Hashtable extends Dictionary implements Map, Cloneable, Serializable

public class HashMap extends AbstractMap implements Map, Cloneable, Serializable

public class LinkedHashMap extends HashMap implements Map

public class TreeMap extends AbstractMap implements SortedMap, NavigableMap, Cloneable, Serializable

public interface SortedMap extends Map

接下来详细测试一下

测试

public class MapTest {

    public static void main(String[] args) {
        Map<Integer, String> hashMap = new HashMap<Integer, String>();    
        System.out.println("插入HashMap-key顺序:");
        for(int i=0; i<10; i++){
            Random random = new Random();
            int rs = random.nextInt(1000);
            hashMap.put(rs, "v*"+rs);
            System.out.println(rs);
        }
        System.out.println("HashMap集合输出:"+hashMap);

        Map<Integer, String> treeMap = new TreeMap<Integer, String>();    
        System.out.println("插入TreeMap-key顺序:");
        for(int i=0; i<10; i++){
            Random random = new Random();
            int rs = random.nextInt(1000);
            treeMap.put(rs, "v*"+rs);
            System.out.println(rs);
        }
        System.out.println("TreeMap集合输出:"+treeMap);

        Map<Integer, String> linkedHashMap = new LinkedHashMap<Integer, String>();    
        System.out.println("插入LinkedHashMap-key顺序:");
        for(int i=0; i<10; i++){
            Random random = new Random();
            int rs = random.nextInt(1000);
            linkedHashMap.put(rs, "v*"+rs);
            System.out.println(rs);
        }
        System.out.println("LinkedHashMap集合输出:"+linkedHashMap);
    }
}

测试结果:

插入HashMap-key顺序:
531
122
279
232
644
525
131
991
374
68
HashMap集合输出:{68=v*68, 374=v*374, 279=v*279, 991=v*991, 531=v*531, 232=v*232, 525=v*525, 644=v*644, 131=v*131, 122=v*122}
插入TreeMap-key顺序:
729
844
297
424
445
286
371
883
453
707
TreeMap集合输出:{286=v*286, 297=v*297, 371=v*371, 424=v*424, 445=v*445, 453=v*453, 707=v*707, 729=v*729, 844=v*844, 883=v*883}
插入LinkedHashMap-key顺序:
152
530
997
772
484
810
18
478
837
951
LinkedHashMap集合输出:{152=v*152, 530=v*530, 997=v*997, 772=v*772, 484=v*484, 810=v*810, 18=v*18, 478=v*478, 837=v*837, 951=v*951}

总结
共同点
HashMap,LinkedHashMap,TreeMap都属于Map;Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。

不同点

  1. HashMap键无序,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,在Map 中插入、删除和定位元素,HashMap 是最好的选择;
  2. LinkedHashMap 是HashMap的一个子类,键保存了插入的顺序,使用Iterator遍历时,得到的也是插入顺序的记录;
  3. TreeMap默认按键的升序排序,可以定制。
  4. HashTable 线程安全,键不能为null,与HashMap类似,但效率较低,HashMap如果需要实现同步,可以使用Collections. synchronizedMap或ConcurrentHashMap 。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值