Map接口:

  Map接口与Collection接口无继承关系。

    区别:Collection中的元素是孤立的,一个一个存进去的。

       Map作为一个映射集合,每一个元素包含Key-value对(键-值对)。即,Map元素总是成对出现的。

  Map中的value对象可以重复,但Key不能重复。

  Map接口的常用集合:

  1.HashMap集合,HashMap类与HashSet类基本相同,都是无序的,

  2.LinkedHashMap集合,存储数据是有序的。

Map接口的常用方法:

package Demo2;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; public class Demo1 {
public static void main(String[] args) {
function();
function1();
function2();
} private static void function2() {
//处理映射中的键/值对组的视图操作
HashMap<Integer,String> h=new HashMap<>();
h.put(10,"aaa");
h.put(20,"bbb");
h.put(30,"ccc");
h.put(40,"ddd");
System.out.println(h);//{20=bbb, 40=ddd, 10=aaa, 30=ccc}
Set<Integer> set = h.keySet();//keySet()方法 返回此映射中包含的键的Set视图(即:将该映射中的键都放入 一个Set集合)
System.out.println(set);//[20, 40, 10, 30]
//values()方法,返回此映射中包含的值的Collection视图。(将该映射中的值都放入一个Collection集合)
Collection<String> val = h.values();
System.out.println(val);//[bbb, ddd, aaa, ccc]
} private static void function1() {
//查询操作
HashMap<String,Integer> h=new HashMap<>();
h.put("张三",18);//put(key,value)方法,将指定的value值与此映射中的指定键key关联
h.put("李四",20);
h.put("小明",22);
h.put("小红",26);
System.out.println(h);//{李四=20, 张三=18, 小明=22, 小红=26}
Integer s = h.get("张三");//get(key)返回指定键key的值,如果此映射不包含该键的映射关系,则返回null。
System.out.println(s);//
int size = h.size();//size()返回映射中的键-值关键字(即集合中的元素个数,每一个 键-值 为一个元素)
System.out.println(size);//
boolean b = h.containsKey("张三");//containsKey(key)判断映射中是否存在关键字key
System.out.println(b);//true containsValue(value) 判断映射中是否存在值value
h.clear();
boolean b1 = h.isEmpty();// 如果此映射不包含键-值映射关系,则返回 true。
System.out.println(b1);//true
} private static void function() {
//添加删除操作
Map<String,Integer> m=new HashMap<>();
m.put("张三",18);//put(key,value)方法,将指定的value值与此映射中的指定键key关联
m.put("李四",20);
m.put("小明",22);
m.put("小红",24);
System.out.println(m);//{李四=20, 张三=18, 小明=22, 小红=24}//输出是无序的
m.remove("小明");//remove(key) :如果存在一个映射关系,则将其从此映射中 移除。
System.out.println(m);//{李四=20, 张三=18, 小红=24}
m.clear();//从此映射中移除所有的映射关系
System.out.println(m);//{}
}
}

Map接口的遍历:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set; public class Demo2 {
public static void main(String[] args) {
function();
function2();
} private static void function2() {
//增强性for循环
Map<Integer,String> h=new HashMap<>();
h.put(11,"aa");
h.put(22,"bb");
h.put(33,"cc");
h.put(44,"dd");
for (Integer key : h.keySet()) {
System.out.println(key+":"+h.get(key));
/* 33:cc
22:bb
11:aa
44:dd*/
}
} private static void function() {
//迭代器遍历
Map<Integer,String> m=new HashMap<>();
m.put(10,"aaa");
m.put(20,"bbb");
m.put(30,"ccc");
m.put(40,"ddd");
Set<Integer> set = m.keySet();
Iterator<Integer> it = set.iterator();
while (it.hasNext()) {
Integer key = it.next();
String val = m.get(key);
System.out.println(key+":" +val);/*20:bbb
40:ddd
10:aaa
30:ccc*/ }
}
}

Map第二种遍历方式:Map.Entry接口遍历

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/*主要用到Entry接口中的entrySet方法来获得映射的Set视图,然后用getKey,getValue方法来获得键和值*/
public class Demo3 {
public static void main(String[] args) {
function();
} private static void function() {
//迭代器循环
Map<Integer,String> m=new HashMap<>();
m.put(10,"aa");
m.put(20,"bb");
m.put(30,"cc");
m.put(40,"dd");
Set<Map.Entry<Integer, String>> set = m.entrySet();
Iterator<Map.Entry<Integer, String>> it = set.iterator();
while (it.hasNext()) {
Map.Entry<Integer, String> next = it.next();
Integer key = next.getKey();//getKey返回与此项对应的键
String value = next.getValue();//getValue 返回与此项对应的值
System.out.println(key+":"+value);
}
/* 20:bb
40:dd
10:aa
30:cc*/
}
}

LinkedHashMap类:

import java.util.LinkedHashMap;

public class Demo4 {
public static void main(String[] args) {
function();
} private static void function() {
LinkedHashMap<Integer,String> link=new LinkedHashMap<>();
link.put(10,"aaa");
link.put(20,"bb");
link.put(30,"cc");
link.put(40,"dd");
System.out.println(link);
for (Integer key : link.keySet()) {
System.out.println(key+":" +link.get(key));
}
/* {10=aaa, 20=bb, 30=cc, 40=dd}
10:aaa
20:bb 结果可以看出是有序的
30:cc
40:dd*/
}
}

综合练习:

  Map嵌套Map:

package Zuoye;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set; public class Demo {
public static void main(String[] args) {
function1();
function2();
function3();//增强型for循环遍历嵌套Map
} private static void function3() {
Map<String, Map<Integer, String>> aaa = function();
//创建aaa映射的Set视图
Set<Map.Entry<String, Map<Integer, String>>> aSet = aaa.entrySet();
for (Map.Entry<String, Map<Integer, String>> amap : aSet) {
//获得下一个aaa映射对象的键
String className = amap.getKey();
System.out.println(className);
//获得值
Map<Integer, String> classInfo = amap.getValue();
Set<Map.Entry<Integer, String>> student = classInfo.entrySet();
for (Map.Entry<Integer, String> stu : student) {
Integer stuNum = stu.getKey();
String stuName = stu.getValue();
System.out.println(stuNum+":"+stuName);
}
}
} private static void function2() {
//调用Map嵌套对象
Map<String, Map<Integer, String>> aaa = function();
//创建aaa的Set视图对向eMap,通过Entry接口
Set<Map.Entry<String, Map<Integer, String>>> eMap = aaa.entrySet();
//创建eMop的迭代器对象it
Iterator<Map.Entry<String, Map<Integer, String>>> it = eMap.iterator();
while (it.hasNext()) {
//获得下一个元素(Map(Map))对象赋值给classMap
Map.Entry<String, Map<Integer, String>> classMap = it.next();
//获得Map(Map)的键,即班级名 ,通过getKey方法
String className = classMap.getKey();
//获得Map(Map)的值,即(Map)对象赋值给classInfo
Map<Integer, String> classInfo = classMap.getValue();
//给(map)映射对象创建Set视图,存储学生信息
Set<Map.Entry<Integer, String>> stu = classInfo.entrySet();
//创建迭代器
Iterator<Map.Entry<Integer, String>> itstu = stu.iterator();
while (itstu.hasNext()) {
//获取下一个学生元素
Map.Entry<Integer, String> Student = itstu.next();
//获得学生对象的键
Integer key = Student.getKey();
//获得学生的值
String value = Student.getValue();
System.out.println(className+":"+key+":"+value);
}
}
} private static void function1() {
//迭代器第一种map循环
Map aaa = function();
Set set = aaa.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
Object className = it.next();
System.out.println(className);
Map ClassInfo = (Map) aaa.get(className);
Set Student = ClassInfo.keySet();
Iterator its = Student.iterator();
while (its.hasNext()) {
Integer StudentNum = (Integer) its.next();
String studentName = (String) ClassInfo.get(StudentNum);
System.out.println(StudentNum+":"+studentName);
/*hoodp班
1:许锦迪
2:王家宝
java班
1:朱东阳
2:常军凯*/
}
}
} private static Map<String, Map<Integer, String>> function() {
//创建Map嵌套Map的对象
//创建java班Map集合
Map<Integer,String> java=new HashMap<Integer,String>();
java.put(001,"朱东阳");
java.put(002,"常军凯");
//创建hoodp班Map集合
Map<Integer,String> hoodp=new HashMap<Integer,String>();
hoodp.put(001,"许锦迪");
hoodp.put(002,"王家宝");
//创建aaaMap集合
Map<String,Map<Integer,String>> aaa=new HashMap<String,Map<Integer,String>>();
aaa.put("java班",java);
aaa.put("hoodp班",hoodp); return aaa;
}
}

Java学习笔记24(Map集合)的更多相关文章

  1. 【Java学习笔记】Map集合的keySet,entrySet,values的用法例子

    import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.M ...

  2. Java集合类学习笔记(Map集合)

    Map用于保存具有映射关系的数据,因此Map集合里保存着两组数据,一组用于保存Map的key,一组用于保存key所对应的value. Map的key不允许重复. HashMap和Hashtable都是 ...

  3. Java 学习笔记 两大集合框架Map和Collection

    两大框架图解 Collection接口 由第一张图,我们可以知道,Collection接口的子接口有三种,分别是List接口,Set接口和Queue接口 List接口 允许有重复的元素,元素按照添加的 ...

  4. 【Java学习笔记】Map借口的子接口----HashMap

    存储在HashMap集合中的元素,必须覆盖hashCode和equals方法(与HashSet类似)   import java.util.HashMap; import java.util.Iter ...

  5. Java学习笔记34(集合框架八:综合案例:模拟斗地主的洗牌发牌)

    规则: 1.54张扑克牌,有花色 2.顺序打乱,一人一张依次发牌,一人17张,留三张作为底牌 3.看牌:按大小王2A....43的序排列打印 示例: package demo; import java ...

  6. Java学习笔记31(集合框架五:set接口、哈希表的介绍)

    set接口的特点: 1.不包含重复元素 2.set集合没有索引,只能用迭代器或增强for循环遍历 3.set的底层是map集合 方法和Collection的方法基本一样 set接口的实现类HashSe ...

  7. 5.2类集(java学习笔记)Map,Set接口

    一.Map接口 Map接口中存储数据是通过key->value的方式成对存储的,可以通过key找到value. 二.Map接口常用子类 1.HashMap HashMap是无序存放的,key不允 ...

  8. 【Java学习笔记】Map

    Map: 一次添加一对元素,也称为双列集合. 而Collection,一次添加一个元素,称为单列集合. 常用方法: 1.添加 value  put(key,value);        返回前一个与k ...

  9. Java学习笔记-基础语法Ⅶ-集合

    集合 集合类特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变 这里需要回顾一下,因为数组和字符串一旦创建,就不可改变,需要区分一下 import java.util.ArrayLi ...

随机推荐

  1. vue element upload图片 回显问题

      beforeUpload (file) { var _this = this; var reader = new FileReader(); reader.readAsDataURL(file); ...

  2. 创建属性Attribute

    XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(xmlPath); var root = xmlDoc.DocumentElement;//取到 ...

  3. Hadoop介绍-4.Hadoop中NameNode、DataNode、Secondary、NameNode、JobTracker TaskTracker

    Hadoop是一个能够对大量数据进行分布式处理的软体框架,实现了Google的MapReduce编程模型和框架,能够把应用程式分割成许多的 小的工作单元,并把这些单元放到任何集群节点上执行.在MapR ...

  4. 二十四、JAVA的NIO和IO的区别

    一.JAVA的NIO和IO 1.NIO:面向缓冲区(buffer)(分为非阻塞模式IO和阻塞模式IO)组成部分:Channels管道,Buffers缓冲区,Selectors选择器 2.IO:面向流( ...

  5. Hadoop格式化 From hu-hadoop1/192.168.11.11 to hu-hadoop2:8485 failed on connection exception: java.net.

    192.168.11.12:8485: Call From hu-hadoop1/192.168.11.11 to hu-hadoop2:8485 failed on connection excep ...

  6. #pragma 处理警告 clang diagnostic 的使用

    首先#pragma在本质上是声明,常用的功能就是注释,尤其是给Code分段注释:而且它还有另一个强大的功能是处理编译器警告,但却没有上一个功能用的那么多. clang diagnostic 是#pra ...

  7. 2015-09-21 css学习1

    3.设置背景图片 Background-image:url(相对路径) ----123.jpg 图片拉伸铺满: background-size:cover 铺满方向: background-repea ...

  8. JTA 使用 MySQL 分布式事务

    假定在MySQL实例1上有表 create table person( id int, name ) ) MySQL实例2上也有一张同样的表,现在从实例1中的 person 表中删除一条数据,并把这条 ...

  9. ActiveMQ broker解析

    在 ActiveMQ 中,broker 集中管理持久的.临时的 queue 和 topic. public class BrokerFilter implements Broker { // 省略其他 ...

  10. Oracle修改监听端口教程

    Oracle默认监听端口1521,一众扫描器通常通过探测1521端口是否开启来探测是否存在Oracle服务,如果修改默认监听端口在一定程度上可以提升数据库和主机的安全性. 比如这里我们修改成2521为 ...