集合框架(04)HashMap
集合Map的简单方法:该集合存储键值对,一对一对往里面存,而且要保证健的唯一性
1.添加
put(K key,V value)
putAll(Map<? Extends k, ? extends v> m)
2.删除
clear()
3.判断
containsValue(Object value)
containsKey(Object key)
isEmpty()
4.获取
get(Object key)
size()
values()
entrySet()
keySet()
方法代码示例:
package CollectionTest; import java.util.Collection;
import java.util.HashMap;
import java.util.Map; public class HashMapDemo1 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,String> map = new HashMap<String,String>();
//在添加元素时,如果添加的相同的键,则后添加的键对应的值会覆盖前面的值
map.put("001", "zhangsan");
map.put("002", "lisi");
map.put("003", "wangwu"); System.out.println("containsKsy:"+map.containsKey("002"));
//remove移除键的同时,返回的是此键对应的值
//System.out.println("remove:"+map.remove("002")); //在HashMap中null可以当做键存起来
map.put(null, "haha");
System.out.println(map.get(null)); //通过values方法得到HashMap的所有值,此时返回的是集合
Collection<String> coll = map.values();
System.out.println("values:"+coll); } }
Map(三种类型以及他们的区别):
- ----HashTable:底层是哈表表数据结构,键和值不可以出现null,该集合石线程同步的
- ----HashMap:底层是哈希白表数据结构,允许使用null值和null键,该集合石不同步的
- ----TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序
Map集合的两种取出方式:
- Set<k> keySet:将map中所有的键存入到set集合,因为set具备迭代器,所有可以迭代方式出去所有的键,在根据get方法,获取每一个键对应的值
2.Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是Map.Entry
Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口
Map.Entry内部代码示例:
interface Map{
public static interface Entry{
public abstract Object getKey();
public abstract Object getValue();
}
}
Map集合的取出原理:
将map集合转化成set集合,之后调用迭代器取出
Map集合第一种出去方式代码示例:
package CollectionTest; import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set; public class HashMapDemo2 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,String> map = new HashMap<String,String>();
map.put("001", "zhangsan");
map.put("002", "lisi");
map.put("003", "wangwu");
//先获取map集合的所有键的Set集合,keySet
Set<String> keyset = map.keySet();
//有了set集合就可以获得其迭代器
Iterator<String> it = keyset.iterator();
while(it.hasNext()){
String key = it.next();
String value = map.get(key);
System.out.println("Key_"+key+":"+value);
} } }
Map集合第二种出去方式代码示例:
package CollectionTest; import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set; public class HashMapDemo2 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,String> map = new HashMap<String,String>();
map.put("001", "zhangsan");
map.put("002", "lisi");
map.put("003", "wangwu");
Set<Map.Entry<String, String>> entry = map.entrySet();
Iterator<Map.Entry<String, String>> it = entry.iterator();
while(it.hasNext()){
Map.Entry<String, String> me = it.next();
String key = me.getKey();
String value = me.getValue();
System.out.println(key+":"+value);
}
} }
Map中除去重复的键需要重写HashCode和equals方法
每一个学生都有对应的归属地
学生Student, 地址String
学生属性:姓名,年龄
注意:姓名和年龄相同的是为同一个学生
保证学生的唯一性
描述学生
定义map容器,将学生作为键,地址最为值,存入,获取map集合中的元素
重写equals和HashCode可以:右击鼠标->source->重写HashCode和equals:代码示例:
package CollectionTest; import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set; class Student{
private String name;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private int age;
Student(String name,int age){
this.name=name;
this.age=age;
} //重写了toString方法 可以直接返回name和age
public String toString(){
return name+":"+age;
}
} public class HashMapDemo3 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub Map<Student,String> map = new HashMap<Student,String>();
map.put(new Student("zhangsan",10), "nanjing");
map.put(new Student("zhangsan",10), "shanghai");
map.put(new Student("lisi",20), "shanghai");
map.put(new Student("wangwu",30), "guangzhou"); Set<Student> keyset = map.keySet(); Iterator<Student> it = keyset.iterator();
while(it.hasNext()){
Student stu = it.next();
String add = map.get(stu);
System.out.println(stu+","+add);
}
System.out.println("..........................");
Set<Map.Entry<Student, String>> set = map.entrySet(); Iterator<Map.Entry<Student, String>> it2 = set.iterator();
while(it2.hasNext()){
Map.Entry<Student, String> me = it2.next();
Student stu2 = me.getKey();
String add2 = me.getValue();
System.out.println(stu2+","+add2);
} } }
集合框架(04)HashMap的更多相关文章
- Java集合框架:HashMap
转载: Java集合框架:HashMap Java集合框架概述 Java集合框架无论是在工作.学习.面试中都会经常涉及到,相信各位也并不陌生,其强大也不用多说,博主最近翻阅java集合框架的源码以 ...
- Java集合框架之HashMap浅析
Java集合框架之HashMap浅析 一.HashMap综述: 1.1.HashMap概述 位于java.util包下的HashMap是Java集合框架的重要成员,它在jdk1.8中定义如下: pub ...
- Java 集合框架 04
集合框架·Map 和 Collections集合工具类 Map集合的概述和特点 * A:Map接口概述 * 查看API可知: * 将键映射到值的对象 * 一个映射不能包含重复的键 * 每个键最多只能映 ...
- (转)Java集合框架:HashMap
来源:朱小厮 链接:http://blog.csdn.net/u013256816/article/details/50912762 Java集合框架概述 Java集合框架无论是在工作.学习.面试中都 ...
- 阶段01Java基础day18集合框架04
18.01_集合框架(Map集合概述和特点) A:Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接 ...
- Java 集合框架:HashMap
原文出处:Java8 系列之重新认识 HashMap 摘要 HashMap 是 Java 程序员使用频率最高的用于映射 (键值对) 处理的数据类型.随着 JDK(Java Developmet Kit ...
- Java集合框架(四)-HashMap
1.HashMap特点 存放的元素都是键值对(key-value),key是唯一的,value是可以重复的 存放的元素也不保证添加的顺序,即是无序的 存放的元素的键可以为null,但是只能有一个key ...
- Java基础之集合框架——使用HashMap地图(TryPhoneBook1)
控制台程序. 首先改进Peron类,使Person可以在地图中用作键,进而存储电话簿中的项.必须添加equals()方法并重写默认的hashCode()方法. import java.io.*; pu ...
- java集合框架04——LinkedList和源码分析
上一章学习了ArrayList,并分析了其源码,这一章我们将对LinkedList的具体实现进行详细的学习.依然遵循上一章的步骤,先对LinkedList有个整体的认识,然后学习它的源码,深入剖析Li ...
- java集合框架之HashMap
参考http://how2j.cn/k/collection/collection-hashmap/365.html#nowhere HashMap的键值对 HashMap储存数据的方式是-- 键值对 ...
随机推荐
- OpenStack Heat 介绍
Heat 是一个基于模板来编排复合云应用的服务. 它目前支持亚马逊的 CloudFormation 模板格式,也支持 Heat 自有的 Hot 模板格式.模板的使用简化了复杂基础设施,服务和应用的定义 ...
- Set(), Get() 真正的目的
在各种面向对象编程中,都有 Set(), Get() 两种方法. 1 常见理解 1 为了保证安全性 2 为了规范代码 其实这些理解都是对的.具体看我们从哪个角度去理解这个内容. 2 个人理解 2.1 ...
- NodeJs02 美女爬虫
note: demo代码要编号 导出模块 一个js文件就是一个模块,模块内部的所有变量,对象,方法对外界都不可见.如果想暴漏出去让别人用,就需要导出模块.语法如下: module.exports = ...
- 将MSHFlexGrid1中记录导出为Excel
1.添加引用Microsoft Excel 14.0 Object Library 2.编写代码部分 Private Sub Output_Click() Dim i As Integer '定义变量 ...
- 【bzoj2306】[Ctsc2011]幸福路径 倍增Floyd
题目描述 一张n个点的有向图,每个点有一个权值.一开始从点$v_0$出发沿图中的边任意移动,移动到路径上的第$i$个点 输入 每一行中两个数之间用一个空格隔开. 输入文件第一行包含两个正整数 n, ...
- P3153 [CQOI2009]跳舞
题目描述 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲.有一些男孩女孩相互喜欢,而其他相互不喜欢(不会”单向喜欢“) ...
- spring in action 学习十二:property placeholder 注解的方式实现避免注入外部属性硬代码化
这里的注解是指@PropertySource这个注解.用@PropertySource这个注解加载.properties文件. 案例的目录结构如下: student.properties的代码如下: ...
- Java并发(2)- 聊聊happens-before
引言 上一篇文章聊到了Java内存模型,在其中我们说JMM是建立在happens-before(先行发生)原则之上的. 为什么这么说呢?因为在Java程序的执行过程中,编译器和处理器对我们所写的代码进 ...
- python常用20库
python核心库和统计 简述 1. Requests.最着名的http库由kenneth reitz编写.这是每个python开发人员必备的. 2. Scrapy.如果您参与webscraping, ...
- windows实时监测热插拔设备的变化(转)
原文转自 https://blog.csdn.net/windows_nt/article/details/13614849 序: 在21世纪,这个信息时代,热插拔设备是一个巨大的安全隐患.在这个篇文 ...