美文网首页技术研发汇集
【Java】 Java中HashMap和TreeMap的区别

【Java】 Java中HashMap和TreeMap的区别

作者: 星辰大海的精灵 | 来源:发表于2024-01-21 14:54 被阅读0次

    首先我们来了解一下Map接口

    (1)Map

    Map包含了一系列“键(key)-值(values)”之间的映射关系,一个Map对象可以看作是一个“键-值”对的集合,在该集合中可以通过一个键找到其对应的值。

    该接口是独立于Collection接口体系的,Map体系中所有类和接口的方法都源自于Map接口。

    我们使用到的实现Map接口的类主要为HashMap类和TreeMap类。

    (2)HashMap

    HashMap 是 Map 接口的实现类,它存储的内容是键值对(key-value)映射,其中 key、value 都可以为 null。HashMap 是无序的,即被存入到 HashMap 中的元素,在遍历 HashMap 时,其输出是无序的。

    由于采用了Hash函数,对于Map的普通操作性能是稳定的,但如果使用iterator访问Map,为了获得高的运行效率最好在创建HashMap时不要将它的容量设得太大。

    创建HashMap

    public static void main(String[] args) {

    // 创建 HashMap 集合,key 存储字符串类型,value 存储整数类型

    Map<String, Integer> hashMap = new HashMap<>();

    }

    HashMap集合的常用方法

    put(key,value); //往集合中添加元素,key 值不可重复,重复时会覆盖之前的 value 值

    get(Object key); //返回指定键的值(value),若不存在则返回null

    remove(Object key); //根据 key 或者 key-value 去除集合中元素,并分别返回 value 值和 Boolean 值

    boolean containsKey(Object key); //如果此映射包含指定键的映射,则返回true 。

    boolean containsValue(Object value); //如果此映射将一个或多个键映射到指定的值,则返回true 。

    int size(); //返回集合长度

    boolean isEmpty(); //判断集合是否为空

    void clear(); //清除集合中的所有元素

    values(); //返回一个新集合,获取集合中所有元素的 values

    keySet(); //返回一个新集合,获取集合中所有元素的 key

    常用方法代码示例:

    public static void main(String[] args) {

    // 创建 HashMap 集合,key存储字符串类型,value存储整数类型

    Map<String, Integer> hashMap = new HashMap<>();

    // 添加元素

    hashMap.put("李四",28);

    hashMap.put("张三",26);

    hashMap.put("王五",26);

    // 根据 key 获取 value 值

    Integer zs = hashMap.get("张三");

    System.out.println(zs);

    // 获取所有 key 值

    Set<String> strings = hashMap.keySet();

    System.out.println(strings);

    // 获取所有 value 值

    Collection<Integer> values = hashMap.values();

    System.out.println(values);

    // 根据 key 去除元素

    Integer ww = hashMap.remove("王五");

    System.out.println(ww);

    // 根据 key-value 去除元素

    boolean boole = hashMap.remove("李四", 28);

    System.out.println(boole);

    System.out.print(hashMap);

    }

    结果示例:

    26

    [李四, 张三, 王五]

    [28, 26, 26]

    26

    true

    {张三=26}

    (3)TreeMap

    TreeMap类和TreeSet类相似,是基于红黑树实现的,是采用一种有序树的结构实现了Map的子接口SortedMap。该类将按键的升序的次序排列元素。

    创建TreeMap

    public static void main(String[] args) {

    // 创建 TreeMap 集合,key 存储字符串类型,value 存储整数类型

    Map<Integer, Stirng> map = new TreeMap<>();

    }

    TreeMap的常用方法

    clear(); //清除集合中的所有元素

    boolean containsKey(Object key); //如果此映射包含指定键的映射,则返回true

    boolean containsValue(Object value); //如果此映射将一个或多个键映射到指定的值,则返回true

    int size(); //返回集合长度

    get(Object key); //返回指定键的值(value),若不存在则返回null

    firstKey(); //返回当前映射中的第一个键

    lastKey(); //返回当前映射中的最后一个键

    (4)HashMap和TreeMap的遍历方法

    1.先得到key值,再使用iterator遍历集合

    TreeMap<Integer,String> map = new TreeMap<>();

    map.put(1,"xixi");

    map.put(2,"jiaojiao");

    Set<String> t = map.getKey();

    Iterator it = t.iterator();

    Integer key = null; //必须先进行key值的声明

    while (it.hasNext()) {

    key = (Integer)it.next();

    String value = map.get(key);

    System.out.println(value);

    }

    2.先得到key值,再使用增强for进行遍历(推荐使用增强for)

    TreeMap<Integer,String> map = new TreeMap<>();

    map.put(1,"xixi");

    map.put(2,"jiaojiao");

    for(int key:map.getKey){

    System.out.println(map.get(key));

    }

    3.直接通过value值,使用iterator遍历

    TreeMap<Integer,String> map = new TreeMap<>();

    map.put(1,"xixi");

    map.put(2,"jiaojiao");

    Collection<String> t = map.values();

    Iterator it = t.Iterator();

    String value = null; //必须声明

    while(it.hasNext()){

    value = (String)it. next();

    System.out.println(value);

    }

    4.直接通过value值,使用增强for遍历(推荐使用增强for)

    TreeMap<Integer,String> map = new TreeMap<>();

    map.put(1,"xixi");

    map.put(2,"jiaojiao");

    for(String value:map.values()){

    System.out.println(value);

    }

    相关文章

      网友评论

        本文标题:【Java】 Java中HashMap和TreeMap的区别

        本文链接:https://www.haomeiwen.com/subject/jzeeodtx.html