Map总结:tree排序,hsah保证唯一性

Map集合特点:该集合存储键值对,一对一对往里存,而且要保证键的唯一性。

Map和Set很像,Set底层就是使用了Map集合。Map没有迭代器,要靠keySet和entrySet方法返回Set,在用迭代器。

Map

|--Hashtable:底层是哈希表数据结构,不可以存入键和值为Null.此实现是同步的。jdk1.0,效率低。------       |--Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。

为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。

|--HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。jdk1.2,效率高

看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashcode方法和equals方法

|--TreeMap:底层是二叉树数据结构,线程不同步,允许使用null值和null键。

可以用于给Map集合中的键进行排序(就要想到二叉树,就要想要排序,就要想到两个接口Comparable,Comparator)。

常用方法:

添加:

v   put(k ,v)//注意;键相同时,put方法返回原来的键映射的值

void putAll(Map); 将Map中的所有映射关系存入,不是以集合的形式存入。

--|    Map<String,String> map = new HashMap<String,String>();

Map<String,Integer> map1 = new HashMap<String,Integer>();

Map<String,String> map2 = new HashMap<String,String>();

map.putAll(map1);//报错,因为map不接受Integer类型

map.putAll(map2);

注:put方法,键相同时,后添加的键覆盖原来的键,并且返回原来的键映射的值

删除 :

void   clear() 从此映射中删除所有映射关系

V(value)  remove(Object ,key)如果存在一个键的映射关系,则将其从此映射中

删除对应键和值,并返回对应的值。不存在返回null

--|map.put("lisi","22");

System.out.println(map.remove("lisi"));//返回22

判断:boolean

containsKey(Object key) 如果此映射包含键的映射关系,则返回true

containsValue(value) 如果此映射值对应一个或多个键,则返回true

is Empty()如果此映射未包含键-值映射关系,则返回 true。

get(key)返回指定键所映射的值。同样可以判断

获取:

get( Object,key)返回指定键所映射的值。

Set  keySet() 返回此映射中所包含的键(全部)

Set<Map.Entry<K,V>>   entrySet() 返回此映射中包含的全部映射关系。

size() 获取此映射中的键-值关系数。//几对

Colection vaules()返回此映射中包含的全部值,与ketSet正好相反。注意返回值。

Map集合的两种取出方式:

Map集合取出的原理:将Map集合转成Set集合,在通过迭代器取出。

1.keyset:返回值类型:Set集合  功能:返回此映射中所包含的键(全部)

思路: 将Map中所有的键存入到Set集合中,因为Set具备迭代器。

所以可以迭代方式取出所有的键,再根据get方法,获取每一个键对应的值。

Set<Integer> keyset = map.keySet();

Iterator<Integer> it = keyset.iterator();

while (it.hasNext()){

Integer num = it.next();

System.out.println("ker:"+num+"..."+"value:"+map.get(num));

2.entrySet:返回值类型:Set  功能:将Map集合的映射关系存入到Set集合中。

而这个关系的数据类型就是:(Map.Entry<k,v>)

Set<Map.Entry<Integer,String>> entryset = map.entrySet();

Iterator<Map.Entry<Integer,String>> it = entryset.iterator();

while (it.hasNext()){

Map.Entry<Integer,String> ma = it.next();

Integer key = ma.getKey();

String value = ma.getValue();

System.out.println("key:"+key+"   "+"value:"+value);

}

//高级for

for(Map.Entry<String, String> m:entryset){

System.out.println("..."+m);

}

Map.Entry :映射项(键-值对)

其实Entry也是一个接口。它是Map接口中一个内部接口。

Map的子类如hashMap在创建的时候用静态内部类实现了Entry.

为什么要定义在内部:1.Map集合先于它存在,它是Map内部的一部分。

2.直接访问Map,所以定义成内部。

练习1;

每一个学生都有对应的归属地 当作值,学生属性:姓名年龄当作键,

注意;姓名和年龄相同的视为同一个学生。    保证学生的唯一性。

思路:

1.描述学生

2.定义map容器,将学生做为键,归属地做为值,存入。

3.获取map集合的元素。

4.因为不知道定义的对象要放在何种集合中,所以要事先compareble,覆盖hashcode和equals

练习2

需求:对学生的年龄进行升序排序。

因为数据是以键值对形式存在。

所以要使用可以排序的Map集合。TreeMap

练习4:

"dfdfegfeghhg"获取该字符串中的字母出现的次数。

希望打印结果:a(1)c(3).....

思路:通过结果发现,每一个字母都有对应的系数。

说明字母和次数之间都有映射关系

1.将字符转换成数组,因为要对每一个字符进行操作。

2.定义一个Map集合,因为打印的字母有顺序,使用TreeMap集合。

3.便利字符数组。

将每一个字母作为键去查map集合。

如果返回null,将字母和1存入map中。

如果返回不是null,说明字母在map集合已经存在并有对应的次数。

那么就获取该次数并自增,然后将字母和自增后的次数存入。

4.将map集合中的数据变成指定的字符串形式返回。

练习4:

扩展 Map扩展,

--教室1(学生.......)

学校 --教室2(学生.......)

--教室3(学生.......)

转载于:https://www.cnblogs.com/heimaprogramer/p/3773006.html

黑马程序员-Map集合相关推荐

  1. 黑马程序员——Java集合基础知识之Map

                                         android培训.java培训.期待与您交流!   Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每 ...

  2. 黑马程序员_集合框架

    ------- android培训.java培训.java学习型技术博客.期待与您交流! ---------- 集合框架 数组和集合 数组虽然也可以存储对象,但长度是固定的:集合长度可变的. 数组中可 ...

  3. 黑马程序员_集合总篇_基础之重点

    ------- <a href="http://www.itheima.com" target="blank">android培训</a> ...

  4. 黑马程序员——JAVA集合

    ------- android培训.java培训.期待与您交流! ---------- 所有的类集都存放在java.util包中 (一)Collection接口 Collection是保存单值集合的最 ...

  5. 黑马程序员——Set集合概述及特点

    ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...

  6. (黑马程序员)Properties集合总结

    Properties集合: 特点: 1,该集合中的键和值都是字符串类型. 2,集合中的数据可以保存到流中,或者从流获取. 通常该集合用于操作以键值对形式存在的配置文件 Map |--Hashtable ...

  7. 黑马程序员_集合学习1

    ------- android培训.java培训.期待与您交流! ---------- 在集合框架中,最顶层的是Collection,它有两个子接口,List和Set 在List和Set接口下,又有很 ...

  8. 黑马程序员_Java集合框架

    集合类 1,为什么出现集合类? 面向对象语言对食物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 2,数组和集合类同是容器,有何不同? 数组 ...

  9. 黑马程序员之 --- 集合

    ------- <a href="http://www.itheima.com" target="blank">android培训</a> ...

最新文章

  1. C#结合js 上传文件和删除文件(技术点有:asp.net mvc ,nhibernate,ajax等)
  2. VC++/MFC中调用CHM帮助文档的方法--ShellExecute
  3. php网站分享qq代码下载,HTML5QQ登录的一篇代码分享
  4. RT-Thread智能音箱音频应用实践
  5. 益生菌拯救“社恐”?肿瘤攘外安内?胎盘似癌?这个世界怎么了。。。
  6. python 学习笔记 - for循环: 字典遍历, 分别打印key, value, key:value
  7. python:configparser模块
  8. window下连接ubuntu mysql的问题
  9. 股指期货真是个好东西
  10. AI语音机器人有哪些需要注意事项
  11. stm32报错:identifier is undefined总结
  12. 两岸四地消费者信心指数出炉:中国大陆消费者信心指数评析
  13. python 二进制与十进制之间的转换
  14. ggplot绘制小提琴图
  15. 如何争取APP Store推荐位
  16. 基于 VIVADO 的 AM 调制解调(3)仿真验证
  17. 学计算机的学生用什么笔记本电脑,什么样的笔记本电脑对学生有好处?这再合适不过了!...
  18. A股个股财报数据更全面啦!—股票数据远程下载服务升级
  19. 深度学习attention机制中的Q,K,V分别是从哪来的?
  20. tomcat7w.exe启动失败,未注册成服务,以及配置Tomcat系统环境变量

热门文章

  1. HDU 6129 Just do it 组合数学 杨辉三角 递推
  2. VB6.0中,DTPicker日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)...
  3. 【Rayeager PX2】Rayeager PX2开发板上安装FreeBSD
  4. VS2010测试功能之旅:编码的“.NET研究”UI测试(2)-操作动作的录制原理(上)...
  5. 春节必看的五个Asp.net源码!
  6. pika集群水平扩展——让性能容量不再受限
  7. Java线程池execute()方法源码解析
  8. 工程师软技能3:如何学习
  9. errgroup 分析
  10. [Python] 函数lambda(), filter(), map(), reduce()