黑马程序员——Map集合(映射)
2015-08-03 07:58
393 查看
-------
android培训、java培训、期待与您交流! ----------
学习总结
Map集合(映射)
该集合存储键值对,一对对存,也称为双列集合。map集合中必须保证键的唯一性。
常用方法:
1、添加
value put(key,value):返回前一个和key关联的值,如果没有返回null。
2、删除
void clear():清空map集合。
value remove(Object key):根据指定的key删除这个键值对,返回删除的值。
3、判断
boolean containsKey(key);
boolean containsValue(value);
boolean isEmpty();
4、获取
value get(key):通过键获取值,如果没有该键返回null。
int size():获取键值对个数。
Collection<V> values() 获取map集合中的所有值,返回Collection集合。
注意:put方法,添加元素时出现相同的键。那么后添加的值会覆盖原有键对应的值,并返回被覆盖的值。
add方法是collection体系中的添加方法;append方法是字符串缓冲区StringBuffer和StringBuilder中的,注意不要混淆= =
Map主要体系:
1.Hashtable 底层是哈希表,不可以存入null键null值,是线程同步的
2.HashMap 底层是哈希表,允许使用null键null值,不同步
3.TreeMap 底层是二叉树,线程不同步,可用于给map集合中的键进行排序(注意——>只能是键)
Map集合的特殊取出方式
1.Set<k> keySet方法
将map中所有的键存入到Set集合。因为set集合具备迭代器。可以用迭代方式取出所有的键,再用get方法,获取每一个键对应的值。(map没有迭代器)
2,Set<Map.Entry<k,v>> entrySet方法
将map集合中的映射关系存入到了set集合中,而该关系的数据类型就是:Map.Entry,然后可通过Map.Entry中的getKey和getValue方法获取键和值。
知识点介绍完了,结合点例子吧
练习:"sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。希望打印结果:a(1)c(2).....
思路:字符对应次数,那么就可以分别作为键和值存入map中
通过字母作为键去map中找值,存在值就+1,不存在就将字母和值1存入
按格式输出map的键值对
上述实现了不统计非字母字符,刚开始我就没想到这么做,后来看了视频资料后才想到= =
android培训、java培训、期待与您交流! ----------
学习总结
Map集合(映射)
该集合存储键值对,一对对存,也称为双列集合。map集合中必须保证键的唯一性。
常用方法:
1、添加
value put(key,value):返回前一个和key关联的值,如果没有返回null。
2、删除
void clear():清空map集合。
value remove(Object key):根据指定的key删除这个键值对,返回删除的值。
3、判断
boolean containsKey(key);
boolean containsValue(value);
boolean isEmpty();
4、获取
value get(key):通过键获取值,如果没有该键返回null。
int size():获取键值对个数。
Collection<V> values() 获取map集合中的所有值,返回Collection集合。
注意:put方法,添加元素时出现相同的键。那么后添加的值会覆盖原有键对应的值,并返回被覆盖的值。
add方法是collection体系中的添加方法;append方法是字符串缓冲区StringBuffer和StringBuilder中的,注意不要混淆= =
Map主要体系:
1.Hashtable 底层是哈希表,不可以存入null键null值,是线程同步的
2.HashMap 底层是哈希表,允许使用null键null值,不同步
3.TreeMap 底层是二叉树,线程不同步,可用于给map集合中的键进行排序(注意——>只能是键)
Map集合的特殊取出方式
1.Set<k> keySet方法
将map中所有的键存入到Set集合。因为set集合具备迭代器。可以用迭代方式取出所有的键,再用get方法,获取每一个键对应的值。(map没有迭代器)
2,Set<Map.Entry<k,v>> entrySet方法
将map集合中的映射关系存入到了set集合中,而该关系的数据类型就是:Map.Entry,然后可通过Map.Entry中的getKey和getValue方法获取键和值。
知识点介绍完了,结合点例子吧
练习:"sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。希望打印结果:a(1)c(2).....
思路:字符对应次数,那么就可以分别作为键和值存入map中
通过字母作为键去map中找值,存在值就+1,不存在就将字母和值1存入
按格式输出map的键值对
import java.util.*; class MapTest { public static void main(String[] args) { String s= charCount("sdfgzxcvasdfxcvdf"); System.out.println(s); } public static String charCount(String str) { char[] chs = str.toCharArray();//将字符串变为字符数组 //最后输出的字符为自然顺序,so用TreeMap——>对键排序 TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>(); int count = 0;//记录字符出现次数 for(int x=0; x<chs.length; x++) { if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z')) continue;//获取字母出现的次数,非字母就跳过 Integer value = tm.get(chs[x]);//通过键查值 if(value!=null) count = value; count++;//值存在,计数加1;不存在,值变为1 tm.put(chs[x],count);//直接往map集合中存储字母和数字(自动装箱变为对应引用型) count = 0;//计数要重置,不会影响下个字符 } StringBuilder sb = new StringBuilder(); //通过entrySet取出map集合的键值对 Set<Map.Entry<Character,Integer>> es = tm.entrySet(); Iterator<Map.Entry<Character,Integer>> it = es.iterator(); while(it.hasNext()) { Map.Entry<Character,Integer> m = it.next(); Character ch = m.getKey(); Integer value = m.getValue(); sb.append(ch+"("+value+")"); } return sb.toString();//通过字符串缓冲区打印 } }P.S. if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z'))continue;
上述实现了不统计非字母字符,刚开始我就没想到这么做,后来看了视频资料后才想到= =
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【079-Word Search(单词搜索)】
- 2015百度校招面试题
- 【LeetCode-面试算法经典-Java实现】【078-Subsets(子集)】
- 【LeetCode-面试算法经典-Java实现】【073-Climbing Stairs(爬楼梯)】
- 编程之美:第二章 数字之魅 2.21只考加法的面试题
- 黑马程序员----JAVA基础----常用对象API
- 面试题38_数字在排序数组中出现的次数
- 程序员写博客想写什么写什么
- 黑马程序员——Java标识符+常量变量类型+运算符+if和swtich语句-第2天
- 小程序员都来看看吧
- 黑马程序员——Java基础笔记---数组
- iOS面试题问题总结
- “脑子快”的程序员更优秀吗?
- 黑马程序员——Java多线程
- 剑指offer面试题java实现之题4:替换空格
- 程序员技术练级攻略
- 面试准备---排序算法--冒泡排序
- 程序员最应去的网站有哪些?
- 怎样才是理想的程序员
- 黑马程序员——多线程技术