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 ...
随机推荐
- iptables中文帮助
Iptables(8) ...
- B-/B+树 MySQL索引结构
索引 索引的简介 简单来说,索引是一种数据结构 其目的在于提高查询效率 可以简单理解为“排好序的快速查找结构” 一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在中磁 ...
- Oracle的substr函数简单用法(转)
转:http://www.cnblogs.com/nicholas_f/articles/1526063.html substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('H ...
- SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思 sql server 2005 2008
原文:http://www.cnblogs.com/ForFreeDom/archive/2009/10/16/1584680.html 在sqlserver2005或SQL2008数据库项目中,创建 ...
- Maven构建SpringMVC+Mybatis项目
1.创建Maven项目时,起始是没有src/main/java.src/test/java.src/test/resources,需要修改一些配置之后,自动就会创建出来: 2.开始引入Spring+M ...
- SpringBoot(二) -- SpringBoot配置
一.配置文件 SpringBoot可以使用两种类型的配置文件(文件名固定): application.properties application.yml 配置文件的作用就是来修改SpringBoot ...
- CentOS7 修复MBR引导
为了达到实验目的,首先破坏MBR引导bootloader 重启系统发现系统进不去了,这正是我们想要的 重启进入系统救援模式,输入以下命令重建MBR引导bootloader 重启,可以正常引导进入系统
- JDK的下载与Java运行环境
JDK简介 什么是JDK JDK是Java Development Kit的缩写,意思是Java开发工具包.JDK就好比作人的心脏,人没有了心脏,生命也就失去存在的意义.Java也一样,JDK就是它的 ...
- Arrays.asList使用指南和一些坑(转)
一.java.util.Arrays.asList() 的一般用法 List 是一种很有用的数据结构,如果需要将一个数组转换为 List 以便进行更丰富的操作的话,可以这么实现: String[] m ...
- WinForm的RadioButton使用小技巧
http://www.cnblogs.com/sjrhero/articles/1883155.html 当多个RadioButton同在一个容器里面的时候,多半的操作都是要得到其中一个的值这个时候我 ...