Map接口与Collection不同:

Collection中的集合元素是孤立的,可理解为单身,是一个一个存进去的,称为单列集合

Map中的集合元素是成对存在的,可理解为夫妻,是一对一对存进去的,称为双列集合

Map中存入的是:键值对,键不可以重复,值可以重复

Map接口中的常用集合:

1.HashMap:哈希表的存储结构,但是无法保证存取顺序

2.LinkedHashMap:存储数据采用的是哈希表和链表,可以有顺序

Map接口的常用方法:

示例:

package demo;

import java.util.HashMap;
import java.util.Map; public class MapDemo {
public static void main(String[] args) {
function1();
function2();
function3();
} public static void function1() {
// 将键值对存储到集合中
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("c", 4);
System.out.println(map);
// {b=2, c=4, a=1}
// =连接键值对,存入重复键,则会覆盖
} public static void function2() {
//通过键获取值
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
String value = map.get(1);
System.out.println(value);//a
//有则返回值,不存在返回null
}
public static void function3(){
//移除集合中的键值对
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
map.remove(3);
System.out.println(map);
//{1=a, 2=b}
}
}

Map接口的遍历:

第一种方式:

package demo;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set; public class MapDemo {
public static void main(String[] args) {
function1();
function2();
} public static void function1() {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String key = it.next();
Integer value = map.get(key);
System.out.println(key + "<==>" + value);
}
} public static void function2() {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);
for (String key : map.keySet()) {
Integer value = map.get(key);
System.out.println(key + "<==>" + value);
}
}
}
// 遍历输出的无序

第二种方式(根据映射关系):

package demo;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; public class MapDemo {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
Set<Entry<Integer, String>> set = map.entrySet();
Iterator<Entry<Integer, String>> it = set.iterator();
while (it.hasNext()) {
Entry<Integer, String> entry = it.next();
Integer key = entry.getKey();
String value = entry.getValue();
System.out.println(key + "<==>" + value);
}
}
}

存储自定义对象:

package demo;

public class Person {
private String name;
private int age; 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;
} public Person(String name, int age) {
super();
this.name = name;
this.age = age;
} public Person() {
super();
// TODO Auto-generated constructor stub
} @Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
} @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;
Person other = (Person) 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;
} }
package demo;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry; //存储自定义类型
public class HashMapDemo {
public static void main(String[] args) {
function1();
function2();
} public static void function1() {
// 自定义类型作为值出现
HashMap<String, Person> map = new HashMap<String, Person>();
map.put("a", new Person("1", 20));
map.put("b", new Person("2", 20));
map.put("c", new Person("3", 20));
// 利用两种遍历
for (String key : map.keySet()) {
Person value = map.get(key);
System.out.println(key + "<==>" + value);
}
for (Entry<String, Person> entry : map.entrySet()) {
String key = entry.getKey();
Person value = entry.getValue();
System.out.println(key + "<==>" + value);
}
} public static void function2() {
// 自定义类型作为键出现
// 保证键的唯一性,需要重写hashcode和equals方法
HashMap<Person, String> map = new HashMap<Person, String>();
map.put(new Person("a", 20), "a");
map.put(new Person("b", 20), "a");
map.put(new Person("c", 20), "a");
map.put(new Person("c", 20), "a");
// 两种遍历
for (Person key : map.keySet()) {
String value = map.get(key);
System.out.println(key + "<==>" + value);
}
for (Entry<Person, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + "<==>" + entry.getValue());
}
} }

LinkedHashMap集合:

package demo;

import java.util.LinkedHashMap;

public class LinkedHashMapDemo {
public static void main(String[] args) {
LinkedHashMap<String, String> link = new LinkedHashMap<String, String>();
link.put("1", "a");
link.put("2", "a");
link.put("3", "a");
link.put("4", "a");
System.out.println(link);
//{1=a, 2=a, 3=a, 4=a}
//存取顺序一致
}
}

set接口下还有一个hashtable集合,但是过时了,现在由hashmap取代

不过,要注意一个问题:

HashMap允许存储null值,HashTable不允许存储null值,两种都不允许存储null键

Java学习笔记32(集合框架六:Map接口)的更多相关文章

  1. 【Java学习笔记】<集合框架>定义功能去除ArrayList中的重复元素

    import java.util.ArrayList; import java.util.Iterator; import cn.itcast.p1.bean.Person; public class ...

  2. 【Java学习笔记】<集合框架>对字符串进行长度排序

    package 测试; import java.util.Comparator; public class ComparatorByLength implements Comparator { //定 ...

  3. 【Java学习笔记】<集合框架>TreeSet,Comparable,Comparator

    public class Person implements Comparable{ private String name; private int age; public Person(){ su ...

  4. Java学习笔记之---集合

    Java学习笔记之---集合 (一)集合框架的体系结构 (二)List(列表) (1)特性 1.List中的元素是有序并且可以重复的,成为序列 2.List可以精确的控制每个元素的插入位置,并且可以删 ...

  5. Java集合框架之Map接口浅析

    Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...

  6. 第19章 集合框架(3)-Map接口

    第19章 集合框架(3)-Map接口 1.Map接口概述 Map是一种映射关系,那么什么是映射关系呢? 映射的数学解释 设A,B是两个非空集合,如果存在一个法则,使得对A中的每一个元素a,按法则f,在 ...

  7. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  8. Java基础学习笔记十七 集合框架(三)之Map

    Map接口 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤立存在的(理解为单身),向集合中存 ...

  9. 【原】Java学习笔记026 - 集合

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:从三国演义中 ...

随机推荐

  1. SpringBoot +Jpa+ Hibernate+Mysql工程

    1 使用工具workspace-sts 3.9.5.RELEASE (1)新建一个SpringBoot 项目,选择加载项目需要的的组件.DevTools,JPA,Web,Mysql. Finish.  ...

  2. java遍历实体类的属性和值

    代码如下: 实体类: public class User implements Serializable { private static final long serialVersionUID = ...

  3. Beta冲刺——第二天

    beat冲刺:第二天 各个成员今日完成的任务 成员 冯晓.马思远 彭辉.王爽 吴琼.郝延婷 今日完成任务 ·管理员功能模块的代码规范与测试 ·网站的前端调整 ·代码规范 ·系统管理模块功能测试 ·博客 ...

  4. 修改CKplayer.js 源码解决移动端浏览器全屏不能限制快进的问题

    原文地址:https://www.cnblogs.com/jying/p/9642445.html,转载请说明出处. 最近项目需要播放视频且限制未观看部分的快进功能,找了两款js插件ckplayer和 ...

  5. 2、订单填写页面 /items/write?skuId=10&orderNo=201903211033410001

    <template> <div class="write"> <div class="adr" v-if="addres ...

  6. 动态创建js脚本和 css样式

    //1.动态添加外部js文件 function loadScript(url){ var script = document.createElement("script"); sc ...

  7. 从汇编层面解释switch语句判断快速的原因

      源码如下: #include <stdio.h>   void main(){     int flag;     flag=1;     switch (flag){         ...

  8. 微信小程序记账本进度六

    //app.jsApp({ onLaunch: function () { //调用API从本地缓存中获取数据 var logs = wx.getStorageSync('logs') || [] l ...

  9. 一 分析easyswoole源码(启动服务)

    分析easyswoole源码 1以启动为例 //检查是否已经安装 installCheck();//检查锁文件是否存在,不存在结束 //启动服务 serverStart showLogo();//显示 ...

  10. centos6.9 编译安装 zabbix-3.0.15

    本文采用编译安装,请在zabbix官网下载所需版本.此处安装版本是:zabbix-3.0.15.tar.gz 操作系统:centos 6.9 一.安装mysqlmysql-community-libs ...