集合框架(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储存数据的方式是-- 键值对 ...
随机推荐
- 孤荷凌寒自学python第七天 列表的复制与序列的基本运算
孤荷凌寒自学python第七天 列表的复制与序列的基本运算 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) (同步语音:https://www.ximalaya.com/keji/191030 ...
- 替换Fragment 报错 The specified child already has a parent. You must call removeView() on the child's parent first.
在将一个fragment替换到一个frameLayout的时候报错: code: transaction.replace(R.id.fragment_container, fragment2); 错误 ...
- linux socket c/s上传文件
这是上传文件的一个示例,可以参照自行修改成下载或者其它功能. 在上传时,需要先将文件名传到服务器端,这是采用一个结构体,包含文件名及文件名长度(可以用于校验),防止文件名乱码. client #inc ...
- 大图轮播js
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- Android可移动的Button
关键 package com.example.administrator.mystudent.ButtonMove; import android.app.Activity; import andro ...
- linux sed讲解
1.sed 查找替换 显示某一行或某几行##替换sed 's###g' oldboy.txtsed 's@@@g' oldboy.txt sed -i 's###g' oldboy.txtsed -i ...
- Android初学者必知会的编程规范
在安卓学习中,我们首先需要掌握的就是Android编程的一些规范,只有掌握了这些规范,后面的深入学习才能开展.今天小编在一个Android培训网站上搜罗了一些,Android初学者不得不知的开发规范, ...
- 【noip2016d2t3】状压DP+巧妙优化
题意可以简单这样考虑 给出n^2个集合(每个集合的元素不超过n),包含某个元素的集合至少有n个,选出最少的集合,使这些集合的并包含n个元素 n最大只有18 可以考虑状压n个元素,然后枚举n^2个集合 ...
- [NOWCODER] myh的超级多项式
题面 已知$f_i=(\sum_{j=1}^ka_j{v_j}^i )\bmod 1004535809$ 给定$v_1,v_2,\ldots,v_k,f_1,f_2,\ldots f_k$ 求$f_n ...
- 使用python读取mysql数据库并进行数据的操作
(一)环境的配置 使用python调用mysql数据库要引进一些库. 目前我使用的python版本是python3.6.引进库为pymysql 其他对应的库可以有以下选择: mysqldb,oursq ...