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

来源:互联网 发布:玩法变了淘宝seo pdf 编辑:程序博客网 时间:2024/05/20 22:26

前言

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

几种Map类结构

public class Hashtable extends Dictionary implements Map, Cloneable, Serializablepublic class HashMap extends AbstractMap implements Map, Cloneable, Serializablepublic class LinkedHashMap extends HashMap implements Mappublic class TreeMap extends AbstractMap implements SortedMap, NavigableMap, Cloneable, Serializablepublic interface SortedMap extends Map

接下来详细测试一下

测试

/** * @描述:Map测试 * @作者:CYH * @版本:V1.0 * @创建时间::2016-12-20 */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顺序:53112227923264452513199137468HashMap集合输出:{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顺序:729844297424445286371883453707TreeMap集合输出:{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顺序:15253099777248481018478837951LinkedHashMap集合输出:{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