集合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. springbootDay03 cookie和session 购物车技术

    一.会话技术 1. 什么是会话 在计算机术语中,会话指的是客户端和服务器交互通讯的过程.简单的理解,大家可以看成是两个普通的人在打电话.一次电话从通话开始到挂断,可以看成是会话. 会话的特征 会话能够 ...

  2. SQL SERVER 2008 bug

    我把一个数据的数据导入的到另外一个数据库 作为 测试库使用. 发现里面设置为唯一标识ID  自动增长的表 全部默认是否. 最后只能手动一个个 表全部改过来. 弄了好久才发现这个问题.浪费了我几个小时的 ...

  3. 堆栈(Stacks)

    堆栈(Stacks) 准备工作 安装Docker 1.13及以上版本 安装Docker Compose正如第三部分的准备工作. 安装Docker Machine正如第四部分的准备工作. 阅读第一部分的 ...

  4. BZOJ1877 [SDOI2009]晨跑 【费用流】

    题目 Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他 坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十字路口和M条街道 ...

  5. 2016"百度之星" - 初赛(Astar Round2A)HDU 5695 拓扑排序+优先队列

    Gym Class Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  6. ASP.NET Identity 使用 RoleManager 进行角色管理 (VS2013RC)

    注:本文系作者原创,但可随意转载. 最近做一个Web平台系统,系统包含3个角色,“管理员, 企业用户, 评审专家”, 分别有不同的功能.一直以来都是使用微软封装好的Microsoft.AspNet.I ...

  7. root权限

    点击左侧终端标 步骤阅读 2 出现命令提示符 3 首先输入:sudo passwd root(设置root密码) 4 输入当前系统的账户密码(账户:admin-pc的密码) 5 输入新的root密码, ...

  8. vue elementui 递归 sidebar可伸缩侧边栏

    最近在学习vue 做了一个可伸缩的 侧边栏 记录下 在很多管理系统都用到 管理系统一般都长的差不多 首先是收起时候 展开时候 首先是新建一个Layout.vue <template> &l ...

  9. SCP 命令(自己总结)

    \ svn 删除所有的 .svn文件 find . -name .svn -type d -exec rm -fr {} \; linux之cp/scp命令+scp命令详解   名称:cp 使用权限: ...

  10. UVALIVE 2431 Binary Stirling Numbers

    转自别人的博客.这里记录一下 这题是定义如下的一个数: S(0, 0) = 1; S(n, 0) = 0 for n > 0;S(0, m) = 0 for m > 0; S(n, m) ...