集合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集合的两种取出方式:

  1. 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的更多相关文章

  1. Java集合框架:HashMap

    转载: Java集合框架:HashMap Java集合框架概述   Java集合框架无论是在工作.学习.面试中都会经常涉及到,相信各位也并不陌生,其强大也不用多说,博主最近翻阅java集合框架的源码以 ...

  2. Java集合框架之HashMap浅析

    Java集合框架之HashMap浅析 一.HashMap综述: 1.1.HashMap概述 位于java.util包下的HashMap是Java集合框架的重要成员,它在jdk1.8中定义如下: pub ...

  3. Java 集合框架 04

    集合框架·Map 和 Collections集合工具类 Map集合的概述和特点 * A:Map接口概述 * 查看API可知: * 将键映射到值的对象 * 一个映射不能包含重复的键 * 每个键最多只能映 ...

  4. (转)Java集合框架:HashMap

    来源:朱小厮 链接:http://blog.csdn.net/u013256816/article/details/50912762 Java集合框架概述 Java集合框架无论是在工作.学习.面试中都 ...

  5. 阶段01Java基础day18集合框架04

    18.01_集合框架(Map集合概述和特点) A:Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接 ...

  6. Java 集合框架:HashMap

    原文出处:Java8 系列之重新认识 HashMap 摘要 HashMap 是 Java 程序员使用频率最高的用于映射 (键值对) 处理的数据类型.随着 JDK(Java Developmet Kit ...

  7. Java集合框架(四)-HashMap

    1.HashMap特点 存放的元素都是键值对(key-value),key是唯一的,value是可以重复的 存放的元素也不保证添加的顺序,即是无序的 存放的元素的键可以为null,但是只能有一个key ...

  8. Java基础之集合框架——使用HashMap地图(TryPhoneBook1)

    控制台程序. 首先改进Peron类,使Person可以在地图中用作键,进而存储电话簿中的项.必须添加equals()方法并重写默认的hashCode()方法. import java.io.*; pu ...

  9. java集合框架04——LinkedList和源码分析

    上一章学习了ArrayList,并分析了其源码,这一章我们将对LinkedList的具体实现进行详细的学习.依然遵循上一章的步骤,先对LinkedList有个整体的认识,然后学习它的源码,深入剖析Li ...

  10. java集合框架之HashMap

    参考http://how2j.cn/k/collection/collection-hashmap/365.html#nowhere HashMap的键值对 HashMap储存数据的方式是-- 键值对 ...

随机推荐

  1. 抽象类和虚方法、base关键字

    微软官方文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/abstract ...

  2. Android 之高仿微信主界面

    源码下载:  http://files.cnblogs.com/aibuli/WeChatSample.zip 主界面主要使用ActionBar来完成.  要实现这个效果,第一步当然是编辑menu目录 ...

  3. XML快速入门

    XML是什么 Extensible Markup Language 自定义标签: 用来传输数据: 可扩展标记语言,是一种类似超文本标记语言的标记语言. 与HTML的比较: 1.不是用来替代HTML的: ...

  4. input file request.files[] 为空

    需要在 form 里设置 一句话 :  $('form').attr("enctype", "multipart/form-data"); <form e ...

  5. sqlserver 汉字转拼音 首写字母 索引 函数

    create function fun_getPY(@str nvarchar(4000)) returns nvarchar(4000) as begin declare @word nchar(1 ...

  6. spring security注解(1)

    Chapter 15. 基于表达式的权限控制 Spring Security 3.0介绍了使用Spring EL表达式的能力,作为一种验证机制 添加简单的配置属性的使用和访问决策投票,就像以前一样. ...

  7. KNN算法在保险业精准营销中的应用

    版权所有,可以转载,禁止修改.转载请注明作者以及原文链接. 一.KNN算法概述 KNN是Machine Learning领域一个简单又实用的算法,与之前讨论过的算法主要存在两点不同: 它是一种非参方法 ...

  8. 基于MPLAB X IDE配置位设置讲解

    http://blog.csdn.net/superanters/article/details/8541171 在讲基于MPLAB X IDE 配置位配置前我先讲讲如何配置配置位. 比如PICLF1 ...

  9. [洛谷P4588][TJOI2018]数学计算

    题目大意:有一个数$x$和取模的数$mod$,初始为$1$,有两个操作: $m:x=x\times m$并输出$x\% mod$ $pos:x=x/第pos次操作乘的数$(保证合法),并输出$x\%m ...

  10. POJ3252 Round Numbers 【数位dp】

    题目链接 POJ3252 题解 为什么每次写出数位dp都如此兴奋? 因为数位dp太苟了 因为我太弱了 设\(f[i][0|1][cnt1][cnt0]\)表示到二进制第\(i\)位,之前是否达到上界, ...