Map
来源:互联网 发布:网络信息安全注意事项 编辑:程序博客网 时间:2024/05/29 13:40
Map集合
他和Collection一样,都属于集合框架中的顶层接口;
Map<K,V> key-value 即同时要让里面传两个参数;
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
Map集合的特点:
该集合存储键值对,是一对一对往里存,而且要保证键的唯一性;
成对成对的出现,就像list一样,都有脚标;
Collection 单列集合 Map 双列集合;
基本的集合思想 增删改查;
1、添加;
V put(K key, V value)
void putAll(Map<? extends K,? extendsV> m)
2、删除;
void clear()
V remove(Object key)
3、判断;
boolean containsKey(Object key)
boolean containsValue(Object value)
boolean isEmpty()
4、
获取;
V get(Object key)
int size()
Collection<V> values()
Set<Map.Entry<K,V>>entrySet()
Set<K> keySet()
Map集合常见三个子集合
Hashtable 特点是底层是哈希表数据结构,不可以存入null键null值的情况;该集合是线程同步的;效率低;JDK 1.0;
HashMap 底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的;效率高;JDK1.2;
(当两个数据结构一模一样,一定有一个取代了另一个;)
TreeMap 底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序;
map集合和Set集合很像,其实Set底层就是使用的Map集合;
remove(key);是把key干掉后,然后返回的是其value;
也可以用get(key)来进行判断是否有value;
HashMap可以通过get的返回值来判断一个键是否存在,通过返回null来判断
HashMap可以往里面存null值,存一个也可以,但是Hashtable就不行;
注意:hash表数据结构的集合,肯定是没有序的;是按照hash值的顺序来排的,不是按照取值的顺序的;
value();表示返回所有的value值的一个集合;
Map集合要保证键的唯一性;
put()添加元素时,如果是添加的相同的key,那么对应的value值中后添加的覆盖原有的,并且put方法返回被覆盖的值;
get方法可以通过一个键来取回对应的value值;
那么如何取出所有的键值对呢?
Collection是迭代器,而这里没有这个;
Map集合的两种取出方式:
1、set <> keySet:将map中所有的键存入到set集合,因为set具备迭代器;所以可以迭代方式取出所有的值,在根据get方法,获取每一个键的对应的值;
keySet(); set 集,把所有的键存到了set集合了;
map集合不需要迭代器,因为map集合的取出原理就是将map集合转成set集合中的迭代器取出;
2、Set<Map.Entry<K,V>>entrySet() 将map集合中的映射关系存入到了set集合中,而这种关系的数据类型就是Map.Entry<K,V>
Map.Entry<K,V> 反映的是一种映射关系的数据类型; 这可以进行泛型嵌套;
这种方法取出的元素是一对一对的,不是一个一个的,这一对一对的类型是Map.Entry<K,V>的;
entrySet()将map集合中的映射关系取出;这个关系就是Map.Entry 类型,获取到后,就可以通过Map.Entry中的getKey和getValue方法获取方法中的键和值;
map.Entry 其实Entry也是一个接口,他是map接口中的一个内部接口;
他反应的是一种映射关系,即一种键值对,没有map就没有映射关系,所以就必须要把接口建在内部,这样就可以访问到了map的键值对了;
能加static的接口一定是内部接口;
static只能用在成员位置上面;
map练习:
key-value对中,值是可以重复的,键是不能重复的;如果重复,则会给后添加的覆盖;
所以要用的话,就要保证键的唯一性;重复了就要被踢掉;
学生,地址,用map演示一下,保证唯一性;;
覆盖toString方法,建立字符串的自定义的表现形式;
如果一个描述类,能够产生非常多的对象的时候,可以先把一些必要实现的类都实现,防止用到;如comparable,执行一个顺序;
以后在开发中,凡是要一个类要创建非常多的动作,就一定要养成这样的习惯,即一定要完成实现和覆盖必须要的方法;
凡是带tree的集合,都可以自定义一个比较器放在构造函数里面;
让集合容器具备比较性;不需要直接让元素具备比较性;
主要条件相等,就比较一下次要条件;
tree 的集合,重复的都会去掉一个,只要是无序的都是不能重复的;所以必须要踢掉一个;
hash数据结构的集合都是无序的,而tree什么的集合默认是按照自然顺序排序的;
练习,获取一字符串中的字母出现的次数;打印成结果,c(1)b(4)。。。。
通过结果发现,每一个字母都有对应的次数,说明字母和次数之间都有映射关系;
注意了,当发现有映射关系时,可以选择map集合,因为map集合中存放就是映射关系;
什么时候使用map集合呢?当数据之间存在着映射关系时,就要先想到map集合;
方法思路:
1、将字符串转换成字符数组,因为要对每一个字母进行操作;
2、定义个map集合,因为打印结果的字母有顺序,所以使用TreeMap集合;
3、遍历字符数组,将每一个字母作为键去查map集合;
如果返回null将该字母和1存入到map集合中;
如果返回不是null,说明该字母在map集合已经存在并有对应次数;
那么就获取该次数并进行自增,然后将该字母和自增后的次数存入到map集合中,覆盖调用原来的键所对应的值;
4、将map集合中的数据变成指定的字符串形式返回;
泛型里面接受的都是引用数据类型,如果基本数据类型要用到泛型就必须要找到其包装类;
要找一个临时容器,就找缓冲区,缓冲期里面什么类型的元素都可以使用;
建议用StringBuilder;
有一个很郁闷的地方,16-08视频17min好像没有打印他的打印藏哪里了呢?
Map集合的扩展知识:一对多的映射关系;
map集合被使用是因为他具备映射关系;
嵌套循环,大全套小圈 一对多的情况就是用这个原理;
- map
- MAP
- map
- MAP
- map
- map
- map
- Map
- Map
- Map
- map
- map
- Map
- .map
- map
- MAP
- map
- Map
- css overflow
- 泛型generics
- 让PostgreSQL数据库和移动硬盘一起移动
- 拓扑排序学习
- POJ 1679 The Unique MST 次小生成树
- Map
- MFC中窗口最小化到托盘处
- RFT 学习-TestObject
- 到底是什么在影响我们的开发效率?
- Matlab------ Matlab 2012b 使用Maple 17内核进行符号计算及Mupad与maple内核的切换
- socket网络编程学习之路 第二篇-----socket函数与结构
- Collection_util
- Chapter1. apple 私有API开发真机调试(一)
- LVM