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("\n******输出map容器中所有的值:");
for(String value : values) {
System.out.print(value + " "); //用String类型的变量value来遍历values容器
}
//得到key的同时,得到key所对应的值
System.out.println("\n******用获取的键来得到对应的值并输出:");
for(String key : keys) {
System.out.print(key + "--" + map.get(key)); //用String类型的变量key来遍历keys容器
}
//map.get(Object key)方法返回的是指定的键所对应 的值,
System.out.println("\nmap容器中键值对的个数是:" + 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对象后面
*/
HashMap测试程序1的更多相关文章
- HashMap测试程序2
package com.iotek.map; import java.util.HashMap;import java.util.Map; public class HashMapDemo2 { /* ...
- Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例
概要 这一章,我们对HashMap进行学习.我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap.内容包括:第1部分 HashMap介绍第2部分 HashMa ...
- JAVA HashMap详细介绍和示例
http://www.jb51.net/article/42769.htm 我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap. 第1部分 HashMa ...
- HashMap源码分析和应用实例的介绍
1.HashMap介绍 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射.HashMap 继承于AbstractMap,实现了Map.Cloneable.java.io.S ...
- Java之HashMap用法
源码: package test_demo; import java.util.HashMap; import java.util.Iterator; import java.util.Map; im ...
- Java HashMap详细介绍和使用示例
①对HashMap的整体认识 HashMap是一个散列表,它存储的内容是键值对(key-value)映射. HashMap继承于AbstractMap,实现了Map.Cloneable.java.io ...
- Java集合系列之HashMap
概要 第1部分 HashMap介绍 HashMap简介 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射.HashMap 继承于AbstractMap,实现了Map.Clo ...
- HashMap与ConcurrentHashMap的区别
从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心. 在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从 ...
- 转发 java数据结构之hashMap详解
概要 这一章,我们对HashMap进行学习.我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap.内容包括:第1部分 HashMap介绍第2部分 HashMa ...
随机推荐
- 06 使用bbed提交delete的数据--01
使用bbed模拟delete提交操作 --session 1 TEST@ orcl )); Table created. TEST@ orcl ,'AAAAA'); row created. TEST ...
- 安装mysql8.0.17时候报错1251-Client does not support authentication protocol requested by server; consider upgrading MySQL client
当mysql数据库安装时候选择的是加密密码时候,用navicat连接时候报错1521,这时候可以cmd之后登陆mysql执行下列代码就可以了 代码: mysql> alter user root ...
- 浅谈vue父子组件之间的传值
前言:本章主要说下父子组件的传值,为商品列表组件之间的传值做一个基础预热.Github:https://github.com/Ewall1106/mall(请选择分支chapter23) 1.父组件向 ...
- 浅谈WebService开发二(同步与异步调用)转
上文 <http://www.dotnetgeek.cn/xuexiwebservice1.html>已经跟大家说了,如果创建一个webservice和简单的调用,本文将注重webserv ...
- New start-开始我的学习记录吧
不知道从何说起,就从眼下的感想开始吧. 转行是一件不容易的事情! 今天是来北京学习Java的第41天.小测验了两次,一次51分,一次54分. 下午有学长过来分享了他的成长经历,感触很多.不是灌鸡汤,也 ...
- c++中关于类的长度的猜想
在无意中,我偶然发现了类的长度并不是由函数的类型及个数决定,也并非是2的倍数.4的倍数. 在翻阅资料中,我得出了一些我认为可能的猜想. 我们先来看一串代码 #include<iostream&g ...
- JAVA总结--java数据类型
一.String 1.String定义是指向堆内存中的引用:String的赋值本身是引用对象的切换,切换前后的对象依然存在:源码为:private final char value[]: 2.对多个S ...
- 使用Redis共享用户登录成功的信息
一.问题 比如CSDN,开源中国等等网站,用户登录后不一定什么时候就会把你T了,意思就是不一定哪天在打开网站的时候就让你重新登录.这是怎么回事呢? 再比如:如果存到将用户信息存到Redis了,不清除的 ...
- 一个完整的http请求响应过程
一. HTTP请求和响应步骤 图片来自:理解Http请求与响应 以上完整表示了HTTP请求和响应的7个步骤,下面从TCP/IP协议模型的角度来理解HTTP请求和响应如何传递的. 二.TCP/IP协 ...
- Django - Xadmin (五) POP
Django - Xadmin (五) POP 功能及逻辑描述 pop 功能:在添加数据时,对于需要选择的多对多字段,在其 input 框边加上一个按钮,点击该按钮可以实现跳转到添加该字段数据的页面: ...