1:Map接口.

Collection体系中存储的是单个元素,单身汉,而Map中存储的是2个元素,存储的是成对的元素。

    Map和Collection是没有联系的!!不要以为Map是Collection的一种或者Collection是Map的一种

1.1:特点

Map存储的是键值对,然而并不是所有键的数据类型都可以做为Map的键,只有引用数据类型才可以做键,基本数据类型是不能作为键的,键不能重复,值可以重复。

1.2:HashMap:底层是用哈希表来保证键的唯一性。方法跟Map接口中的方法是一样的。如果HashMap的键为自定义数据类型,那么这个类型也必须重写hashCode()和equals方法。来告诉HashMap如何去除重复元素。

 package com.java.domai;

 public class Student implements Comparable<Student>{
private String Ename;
private String Cname;
private int age;
private String sex;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String ename, String cname, int age, String sex) {
super();
Ename = ename;
Cname = cname;
this.age = age;
this.sex = sex;
}
public Student(String cname, int age, String sex) {
super();
Cname = cname;
this.age = age;
this.sex = sex;
} //...省略get和set方法 @Override
public String toString() {
return "Student [Cname=" + Cname + ", age=" + age
+ ", sex=" + sex + "]";
}
@Override
public int compareTo(Student o) {
// TODO Auto-generated method stub
return age - o.age;
// return Cname.compareTo(o.Cname);
} }

1.3:TreeMap:底层是用红黑树(二叉树)来保证键的唯一性,和对键进行排序。排序:如果返回值>0,则传入的数据放在右边

TreeMap的键的对象必须实现Comparable接口,重写compareTo方法。或者让TreeMap具有可比性,可以传一个比较器给集合。

 package com.java.treemap;

 import java.util.Comparator;
import java.util.TreeMap; import com.java.domai.Student; /*
* 需求:创建TreeMap集合,键为学生对象:学生:姓名,年龄,性别。,值为学生的地址,,放几个学生对象到TreeMap集合中
* 再遍历集合。
*/
public class TreeMapDemo3 {
public static void main(String[] args) {
TreeMap<Student, String> map = new TreeMap<Student, String>();
map.put(new Student("aa", 20, "男"), "广州");
map.put(new Student("aa", 20, "男"), "北京");
map.put(new Student("cp", 22, "男"), "上海");
map.put(new Student("cc", 22, "女"), "上海");
map.put(new Student("dd", 23, "男"), "深圳");
//System.out.println(map);
// 以名字来进行排序 TreeMap<Student, String> map2 = new TreeMap<Student, String>(new Comparator<Student>() { @Override
public int compare(Student o1, Student o2) {
return o1.getCname().compareTo(o2.getCname());
}
}); map2.put(new Student("aa", 20, "男"), "广州");
map2.put(new Student("aa", 22, "女"), "广州");
map2.put(new Student("bb", 25, "男"), "北京");
map2.put(new Student("cp", 22, "男"), "上海");
map2.put(new Student("cc", 22, "女"), "上海");
map2.put(new Student("dd", 23, "男"), "深圳");
System.out.println(map2);
} }

1.4:HashTable:底层都是哈希表来保证键的唯一性。

跟HashMap区别

1:HashMap的键和值可以为null,而HashTable的键和值不能为null.

2:HashMap不是同步的,而HashTable是同步的。所以建议用HashMap.

1.5:Properties:键和值都是String。主要用于配置文件

   1.6:Map的遍历可以通过迭代器遍历:

      

Map<String, String> map = new HashMap<String, String>();
map.put("2012254101", "zjw");
map.put("2012254102", "jjl");
map.put("2012254103", "ywc");
map.put("2012254104", "tj"); Set<String> set = map.keySet();//获取键的Set集合,set和Map的键一样是不能重复的
Iterator<String> it = set.iterator();
while(it.hasNext()){
String key = it.next();
String name = map.get(key);
System.out.println(key+" : "+name);
}

2.个人掌握了解Map和Collection混合用法的例子

 package com.java.map;
好开心
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set; import com.java.domai.Student;//上面的Student类
public class CopyOfHashMapDemo1 {
public static void main(String[] args) {
/*
* 键就是对象的属性。值就是对象的属性值
* 一个对象用一个Map类表示
* 然后将这个Map装进一个集合里面
*/
/*
*这个List中泛型的数据类型是一个Map类型,做着做着发现后面不用list
*而泛型Map的键第是班级Map<String, String>,值是学生列表List<Student>
*/ List<Map<Map<String,String>, List<Student>>> schoolList = new ArrayList<Map<Map<String,String>, List<Student>>>(); //用这个Map保存班级信息,key=class;value=班级
Map<String, String> classMap1 = new HashMap<String, String>();
classMap1.put("class", "Java");
Map<String, String> classMap2 = new HashMap<String, String>();
classMap2.put("class", "IOS"); //创建两个学生集合吧
List<Student> list1 = new ArrayList<Student>();
list1.add(new Student("zjx", 34, "nan"));
list1.add(new Student("zjx1", 32, "nan"));
list1.add(new Student("zjx2", 12, "nan"));
//创建两个学生集合吧
List<Student> list2 = new ArrayList<Student>();
list2.add(new Student("dell", 34, "nan"));
list2.add(new Student("dell1", 32, "nan"));
list2.add(new Student("dell2", 12, "nan")); //将班级map和学生list放到一个集合里,键是map,值是list。这个看起来很搞怪
Map<Map<String, String>, List<Student>> map = new HashMap<Map<String,String>, List<Student>>();
map.put(classMap1, list1);
map.put(classMap2, list2); //开始获取key了
//keyset:中文就是键的set了,用来保存key的一个set结合。
//由于key在Map中是唯一的、不重复的,而Set保存的是不重复的元素,那就配合刚好
//key的类型是Map<String, String>,所以Set的泛型类型也要这样
Set<Map<String, String>> set = map.keySet();
//可以直接打印看看
//System.out.println(set);
//要开始用迭代器了,迭代的泛型类型和set的一样
Iterator<Map<String, String>> it = set.iterator();
//遍历
while(it.hasNext()){//如果有下个 话。。。
//获取了Map类型的键了
Map<String, String> key = it.next();
//key既然是个Map,那么它里面就还有键值对咯,没错,就是班级的键值对
String key2 = key.get("class");
System.out.println(key2);
//通过键来获取值吧,值是list类型的,是从最大的那个Map获取,就是List所在的那个Map
List<Student> stuList = map.get(key);
//得到List了可以遍历list,遍历的方式自己喜欢咯
//先迭代试试
Iterator<Student> it2 = stuList.iterator();
while(it2.hasNext()){
Student stu = it2.next();
System.out.println("\t"+stu);
}
System.out.println("+++++++++++++");
//也可以普通for循环遍历啊
/*for(int i=0; i<stuList.size(); i++){
Student stu = stuList.get(i);
System.out.println("\t"+stu);
}*/
System.out.println("+++++++++++++");
//还可以增强for循环
/*for (Student student : stuList) {
System.out.println("\t"+student);
}*/
//System.out.println(key+" : "+stuList);
}
/*
* ok 了,终于大功告成,虽然过程很绕,
* 但是我基本上明白了Map 的添加数据,添加不同类型的数据作为键和值
* 明白了怎样去使用迭代器去Map中的值,
* 知道了迭代器中的泛型类型是和使用迭代方法的集合的泛型类型是一样的
* 了解了几种循环遍历的方式,以及处理了繁杂的循环和取值
* 我觉得我之前不理解的就是用Map作为键去取值,其实和普通的取值方式一样的了,就是个类型不同
* Map<String, String>:键中有键,
*
*
*/ } }

对Map的一些总结的更多相关文章

  1. mapreduce中一个map多个输入路径

    package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...

  2. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

    .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...

  3. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  4. Java基础Map接口+Collections

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  5. 多用多学之Java中的Set,List,Map

            很长时间以来一直代码中用的比较多的数据列表主要是List,而且都是ArrayList,感觉有这个玩意就够了.ArrayList是用于实现动态数组的包装工具类,这样写代码的时候就可以拉进 ...

  6. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  7. MapReduce剖析笔记之八: Map输出数据的处理类MapOutputBuffer分析

    在上一节我们分析了Child子进程启动,处理Map.Reduce任务的主要过程,但对于一些细节没有分析,这一节主要对MapOutputBuffer这个关键类进行分析. MapOutputBuffer顾 ...

  8. MapReduce剖析笔记之七:Child子进程处理Map和Reduce任务的主要流程

    在上一节我们分析了TaskTracker如何对JobTracker分配过来的任务进行初始化,并创建各类JVM启动所需的信息,最终创建JVM的整个过程,本节我们继续来看,JVM启动后,执行的是Child ...

  9. MapReduce剖析笔记之五:Map与Reduce任务分配过程

    在上一节分析了TaskTracker和JobTracker之间通过周期的心跳消息获取任务分配结果的过程.中间留了一个问题,就是任务到底是怎么分配的.任务的分配自然是由JobTracker做出来的,具体 ...

  10. MapReduce剖析笔记之三:Job的Map/Reduce Task初始化

    上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...

随机推荐

  1. 关于C#里面SQLite读取数据的操作

    做C#朋友的一个获取DataSet函数,对C#不熟,整理整理,了解怎么用 //挂载表格时候用 public static DataSet Query(string SQLString) { using ...

  2. mybatis mybatis.xml 文件和properties文件结合来进行配置数据源

  3. [LeetCode 题解]:Gas Station

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 There are ...

  4. Python 串口通信 GUI 开发

    在项目中遇到树莓派串口通信问题.由于本人一直从事.net 开发,希望将树莓派系统换成Win10 IOT版.但是在测试过程中出现无法找到串口的问题.最终也没有解决.最终按照领导要求,linux (了解不 ...

  5. pageadmin CMS Sql新建数据库和用户名教程

    用pageadmin网站制作如何Sql新建数据库和用户名 sql server软件安装完毕后,需要新建一个数据库用来作为网站的数据库. 1.打开sql管理界面,如图所示,找到数据库,右键单击数据库,选 ...

  6. 16、xtrabackup 增量备份及恢复

    备份命令如下 备份命令如下 全量备份 #  innobackupex -p123123 /backup # ls /backup 2017-04-08_13-36-11 增量备份或差量备份 # inn ...

  7. “全栈2019”Java第七十五章:内部类持有外部类对象

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. bzoj2662冻结

    题目链接 话说为什么出题人老是卡$SPFA$啊$qwq$ 然而$SPFA$硬是让本宝宝写成了$dij$ 分情况讨论就好 /*************************************** ...

  9. 牛客挑战赛30D 小A的昆特牌(组合数学)

    题面 传送门 题解 很容易写出一个暴力 \[\sum_{i=l}^r {i+n-1\choose n-1}{s-i+m\choose m}\] 即枚举选了多少个步兵,然后用插板法算出方案数 我们对这个 ...

  10. bootstrap-table教程演示

    Bootstrap Admin 效果展示 Table of contents Create Remove Update Export Tree Create 相关插件 bootstrap-valida ...