集合框架(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储存数据的方式是-- 键值对 ...
随机推荐
- a链接点击下载图片到本地(php)
$url="http://pan.baidu.com/share/qrcode?w=150&h=150&url=http://gandao.my".U('Quest ...
- C# Socket通信的服务器与客户端
客户端代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...
- JavaSE复习(一)继承多态与常用API
继承与多态 在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式: 直接通过子类对象访问成员变量:等号左边是谁,就优先用谁,没有则向上找 间接通过成员方法访问成员变量:该方法属于 ...
- linux configuration
sudo vi /etc/profile export JAVA_HOME=/usr/bin/jdk1.8.0_40export JRE_HOME=${JAVA_HOME}/jre export C ...
- MVC学习笔记---WebViewPage(nop等开源项目的@T)
http://www.cnblogs.com/gyche/p/5597491.html http://www.cnblogs.com/Alex80/p/5369042.html http://www. ...
- atom下python好用的几个插件
atom下python好用的几个插件 atom-beautify 代码优化 atom-python-run 运行 autocomplete-python 代码补全 file-icons 图标优化 hi ...
- Servlet 中利用阿里云包fastjson-1.2.43.jar把map转为Json并返回前端
1.引入fastjson-1.2.43.jar 包到lib下面,下载地址链接: https://pan.baidu.com/s/1EgAOikoG4VJRJrnUw83SNA 密码: n2fr im ...
- HDU 4585 Shaolin(Treap找前驱和后继)
Shaolin Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Su ...
- 乌龟git
相关操作 链接:http://www.cnblogs.com/hbujt/p/5554038.html 避免乌龟每次输入账户密码 链接:http://www.cnblogs.com/bldf/p/60 ...
- HDU5307 He is Flying
JRY wants to drag racing along a long road. There are nn sections on the road, the ii-th section has ...