黑马程序员-Map集合
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集合相关推荐
- 黑马程序员——Java集合基础知识之Map
android培训.java培训.期待与您交流! Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每 ...
- 黑马程序员_集合框架
------- android培训.java培训.java学习型技术博客.期待与您交流! ---------- 集合框架 数组和集合 数组虽然也可以存储对象,但长度是固定的:集合长度可变的. 数组中可 ...
- 黑马程序员_集合总篇_基础之重点
------- <a href="http://www.itheima.com" target="blank">android培训</a> ...
- 黑马程序员——JAVA集合
------- android培训.java培训.期待与您交流! ---------- 所有的类集都存放在java.util包中 (一)Collection接口 Collection是保存单值集合的最 ...
- 黑马程序员——Set集合概述及特点
------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...
- (黑马程序员)Properties集合总结
Properties集合: 特点: 1,该集合中的键和值都是字符串类型. 2,集合中的数据可以保存到流中,或者从流获取. 通常该集合用于操作以键值对形式存在的配置文件 Map |--Hashtable ...
- 黑马程序员_集合学习1
------- android培训.java培训.期待与您交流! ---------- 在集合框架中,最顶层的是Collection,它有两个子接口,List和Set 在List和Set接口下,又有很 ...
- 黑马程序员_Java集合框架
集合类 1,为什么出现集合类? 面向对象语言对食物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 2,数组和集合类同是容器,有何不同? 数组 ...
- 黑马程序员之 --- 集合
------- <a href="http://www.itheima.com" target="blank">android培训</a> ...
最新文章
- C#结合js 上传文件和删除文件(技术点有:asp.net mvc ,nhibernate,ajax等)
- VC++/MFC中调用CHM帮助文档的方法--ShellExecute
- php网站分享qq代码下载,HTML5QQ登录的一篇代码分享
- RT-Thread智能音箱音频应用实践
- 益生菌拯救“社恐”?肿瘤攘外安内?胎盘似癌?这个世界怎么了。。。
- python 学习笔记 - for循环: 字典遍历, 分别打印key, value, key:value
- python:configparser模块
- window下连接ubuntu mysql的问题
- 股指期货真是个好东西
- AI语音机器人有哪些需要注意事项
- stm32报错:identifier is undefined总结
- 两岸四地消费者信心指数出炉:中国大陆消费者信心指数评析
- python 二进制与十进制之间的转换
- ggplot绘制小提琴图
- 如何争取APP Store推荐位
- 基于 VIVADO 的 AM 调制解调(3)仿真验证
- 学计算机的学生用什么笔记本电脑,什么样的笔记本电脑对学生有好处?这再合适不过了!...
- A股个股财报数据更全面啦!—股票数据远程下载服务升级
- 深度学习attention机制中的Q,K,V分别是从哪来的?
- tomcat7w.exe启动失败,未注册成服务,以及配置Tomcat系统环境变量
热门文章
- HDU 6129 Just do it 组合数学 杨辉三角 递推
- VB6.0中,DTPicker日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)...
- 【Rayeager PX2】Rayeager PX2开发板上安装FreeBSD
- VS2010测试功能之旅:编码的“.NET研究”UI测试(2)-操作动作的录制原理(上)...
- 春节必看的五个Asp.net源码!
- pika集群水平扩展——让性能容量不再受限
- Java线程池execute()方法源码解析
- 工程师软技能3:如何学习
- errgroup 分析
- [Python] 函数lambda(), filter(), map(), reduce()