20.HashMap和TreeMap

  1. 20.集合类-HashMap和TreeMap
    1. 20.1 知识点
      1. 回顾Java中集合类关系
      2. Map接口中的方法
      3. HashMap和TreeMap之间的区别
      4. HashMap和TreeMap中的常用方法
      5. 总结
    2. 20.2 知识点代码

20.集合类-HashMap和TreeMap


20.1 知识点

回顾Java中集合类关系

// Collection(接口)
//   __________|__________
//  |                     |
// Set(接口)           List(接口)
// ___|____           _____|_____
// |       |         |           |
// HashSet SortedSet ArrayList LinkedList
//          |
//       TreeSet

// Map(接口)
// ________|_______
// |              |
// HashMap       TreeMap

// Map集合类似C#中的Dictionary字典
// 以键值对形式存储数据

Map接口中的方法

put(K key, V value) 添加键值对
containsKey(Object key) 判断是否存在键
containsValue(Object value) 判断是否存在值
get(Object key) 如果存在key,则返回对应值,否则返回null
keySet() 返回该集合中的所有key对象形成的Set集合
values() 返回该集合中所有value对象形成的Collection集合
size() 键值对对数
isEmpty() 是否为空
remove(Object key) 根据键移除
clear() 清空容器

HashMap和TreeMap之间的区别

相同点:他们都是以键值对形式存储数据,方法使用基本相同
不同点:

  1. HashMap允许有null键和null值(但是必须保持键的唯一性)
    TreeMap不允许键为空
  2. TreeMap中的映射关系具有一定的顺序,它会帮助我们进行排序
    因此在添加、删除、定位映射关系时,效率较HashMap差
  3. HashMap数据结构基于哈希表,TreeMap数据结构基于树
    在实际使用时,建议都使用HashMap,除非需要排序的Map时才用TreeMap

HashMap和TreeMap中的常用方法

// 1.初始化
// 创建一个HashMap,键为Integer类型,值为String类型
HashMap<Integer, String> hashMap = new HashMap<>();

// 2.增
// 向HashMap中添加三个键值对
hashMap.put(1, "123");
hashMap.put(2, "234");
hashMap.put(3, "345");

// 3.删
// 从HashMap中移除键为3的条目
hashMap.remove(3);

// 4.查
// 打印键为2对应的值,预期输出: 234
System.out.println(hashMap.get(2));
// 检查HashMap中是否包含键1,是,因此打印: 存在键1
if (hashMap.containsKey(1)) System.out.println("存在键1");
// 检查HashMap中是否包含值"123",是,因此打印: 存在值123
if (hashMap.containsValue("123")) System.out.println("存在值123");

// 5.改
// 如果HashMap中包含键1,则将其对应的值改为"555"
if (hashMap.containsKey(1)) hashMap.put(1, "555");
// 打印修改后键为1对应的值,预期输出: 555
System.out.println(hashMap.get(1));

// 6.遍历
// 遍历HashMap的键,并打印对应的值
// 预期输出(顺序可能不同,因为HashMap不保证顺序):
// 555
// 234
for (Integer i : hashMap.keySet())
{
    System.out.println(hashMap.get(i));
}

// 遍历HashMap的值并打印
// 预期输出(顺序可能不同,因为HashMap不保证顺序):
// 555
// 234
for (String str : hashMap.values())
{
    System.out.println(str);
}

总结

Java中的Map集合类似C#中的Dictionary字典
我们在使用时,建议主要使用HashMap,它的效率高于TreeMap


20.2 知识点代码

import java.util.HashMap;

public class Lesson20_集合类_HashMap和TreeMap
{
    public static void main(String[] args)
    {
        //知识点1:回顾Java中集合类关系
        //              Collection(接口)
        //        __________|__________
        //       |                     |
        //      Set(接口)             List(接口)
        //    ___|____            _____|_____
        //   |        |          |           |
        //HashSet  SortedSet  ArrayList  LinkedList
        //            |
        //         TreeSet

        //           Map(接口)
        //    ________|_______
        //   |                |
        // HashMap         TreeMap

        //Map集合类似C#中的Dictionary字典
        //以键值对形式存储数据



        //知识点2:Map接口中的方法
        //1.put(K key, V value) 添加键值对
        //2.containsKey(Object key) 判断是否存在键
        //3.containsValue(Object value) 判断是否存在值
        //4.get(Object key) 如果存在key,则返回对应值,否则返回null
        //5.keySet() 返回该集合中的所有key对象形成的Set集合
        //6.values() 返回该集合中所有value对象形成的Collection集合
        //7.size() 键值对 对数
        //8.isEmpty() 是否为空
        //9.remove(Object key) 根据键移除
        //10.clear() 清空容器



        //知识点3:HashMap和TreeMap之间的区别
        //相同点:他们都是以键值对形式存储数据,方法使用基本相同
        //不同点:1.HashMap允许有null键和null值(但是必须保持键的唯一性)
        //         TreeMap不允许键为空
        //       2.TreeMap中的映射关系具有一定的顺序,它会帮助我们进行排序
        //         因此在添加、删除、定位映射关系时,效率较HashMap差
        //       3.HashMap数据结构基于哈希表,TreeMap数据结构基于树
        //在实际使用时,建议都使用HashMap,除非需要排序的Map时才用TreeMap



        //知识点4:HashMap和TreeMap中的常用方法
        //1.初始化
        // 创建一个HashMap,键为Integer类型,值为String类型
        HashMap<Integer, String> hashMap = new HashMap<>();

        //2.增
        // 向HashMap中添加三个键值对
        hashMap.put(1, "123");
        hashMap.put(2, "234");
        hashMap.put(3, "345");

        //3.删
        // 从HashMap中移除键为3的条目
        hashMap.remove(3);

        //4.查
        // 打印键为2对应的值,预期输出: 234
        System.out.println(hashMap.get(2));
        // 检查HashMap中是否包含键1,是,因此打印: 存在键1
        if (hashMap.containsKey(1)) System.out.println("存在键1");
        // 检查HashMap中是否包含值"123",是,因此打印: 存在值123
        if (hashMap.containsValue("123")) System.out.println("存在值123");

        //5.改
        // 如果HashMap中包含键1,则将其对应的值改为"555"
        if (hashMap.containsKey(1)) hashMap.put(1, "555");
        // 打印修改后键为1对应的值,预期输出: 555
        System.out.println(hashMap.get(1));

        //6.遍历
        // 遍历HashMap的键,并打印对应的值
        // 预期输出(顺序可能不同,因为HashMap不保证顺序):
        // 555
        // 234
        for (Integer i : hashMap.keySet())
        {
            System.out.println(hashMap.get(i));
        }

        // 遍历HashMap的值并打印
        // 预期输出(顺序可能不同,因为HashMap不保证顺序):
        // 555
        // 234
        for (String str : hashMap.values())
        {
            System.out.println(str);
        }



        //总结
        //Java中的Map集合类似C#中的Dictionary字典
        //我们在使用时,建议主要使用HashMap,它的效率高于TreeMap
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏