zoukankan      html  css  js  c++  java
  • HashMap测试程序1

    package com.iotek.map;

    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;

    public class HashMapDemo1 {
    public static void main(String[] args) {
    // HashMap<String, String> map = new HashMap<String,String>();
    Map<String, String> map = new HashMap<String,String>(); //接口的引用变量指向实现类的对象
    //创建HashMap对象,也就是创建一个Map容器
    map.put("jay", "张三"); //添加键值对元素
    map.put("jay", "李四");
    //有相同的键时,后面添加的键对应的值会覆盖掉之前键对应的值
    map.put("john", "李四");
    //键名不同,键值相同,会保存重名的键值,也就是说值是可以重复的,键是不能重复的
    map.put("rose", "玫瑰"); //添加键值对元素
    map.put("mary", "小红"); //添加键值对元素
    System.out.println(map);

    Set<String> keys = map.keySet();// 获取map中所有键,返回的是一个Set容器,可以用迭代器对象或者foreach来进行输出
    System.out.println("******输出map容器中所有的键:");
    /*for(String key : keys) {
    System.out.print(key + " "); //用String类型的变量key来遍历keys容器
    }*/

    //获取map中所有的值:使用map接口中的values方法,返回Collection接口的实现类
    Collection<String> values = map.values();
    System.out.println(" ******输出map容器中所有的值:");
    for(String value : values) {
    System.out.print(value + " "); //用String类型的变量value来遍历values容器
    }

    //得到key的同时,得到key所对应的值
    System.out.println(" ******用获取的键来得到对应的值并输出:");
    for(String key : keys) {
    System.out.print(key + "--" + map.get(key)); //用String类型的变量key来遍历keys容器
    }
    //map.get(Object key)方法返回的是指定的键所对应 的值,
    System.out.println(" map容器中键值对的个数是:" + map.size());
    System.out.println("判断map容器中是否为空:" + map.isEmpty());

    // map.entrySet()返回的是一个set容器,其中放的是map.Entry内部接口
    /*当我们调用put(key,value)方法时,首先会把key和value封装到Entry这个静态内部类中,
    * 再把Entry对象添加到数组中(哈希表),所以我们想要获取map中的所有键值对,只需要获取
    * 数组汇总所有的Entry,接下来调用Entry对象中的getKey 和getValue方法就能获取键值对
    * 以后想输出HashMap容器中所有的键值对,都可以调用HashMap的 entrySet()方法就可以了!!!*/
    Set<Entry<String, String>> entrys = map.entrySet();
    System.out.println("使用map接口的entrySet()方法获取map容器中所有的键值对:");
    for (Entry<String, String> entry : entrys) {
    System.out.println(entry.getKey() + "-" + entry.getValue());
    }
    map.clear();
    System.out.println("判断map容器中是否为空:" + map.isEmpty());

    }

    }

    /*
    * hashmap调用默认构造方法会产生一个默认底层是长度为16的Entry数组,首先调用key的hasCode()方法来得到一个整数,
    * int hash = hash(key.hashCode());
    * 这个整数就是哈希码,然后把哈希码作为参数传递到hash()函数中来进行运算,即散列运算,得到一个int类型的散列值
    * int i = indexFor(hash, table.length);
    * 把散列值和数组的长度来进行运算,最终得到Entry对象要存放到数组的位置(下标)
    *
    * hashmap内部的结构是数组加单向链表结构,因为不同的key有可能计算出相同的散列值,根据散列值计算出来的存放到数组的下标
    * 会冲突(同一个下标值),此时, 如果键相同,散列值也一样,说明是同一个对象,此时会将键所对应的旧值用新的键值覆盖掉
    * 如果散列值一样,键名不一样,说明是不同的对象,此时会把键值对封装成entry对象放到那个散列值对应的下标位置处,
    * 原来那个entry对象会以链表形式链接在新创建的entry对象后面
    */

  • 相关阅读:
    如何查看自己的显卡是否支持DirectX 12
    笔记本屏幕忽然变暗的解决办法
    Python 自动给数字前面补0
    vscode左边侧边栏字体的大小
    .NET 异步详解
    新版 C# 高效率编程指南
    轻松学会 React 钩子:以 useEffect() 为例
    React Hooks 入门教程
    UMI.js开发知识总结
    处理react项目ie11浏览器运行空白问题
  • 原文地址:https://www.cnblogs.com/enjoyjava/p/6876332.html
Copyright © 2011-2022 走看看