Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
|--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代
jdk1.2.出现,效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
map集合的两种取出方式:
1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。
所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。
Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
而这个关系的数据类型就是:Map.Entry
Entry其实就是Map中的一个static内部接口。
为什么要定义在内部呢?
因为只有有了Map集合,有了键值对,才会有键值的映射关系。关系属于Map集合中的一个内部事物。而且该事物在直接访问Map集合中的元素。
关系如下代码所示:
interface Map { public static interface Entry { public abstract Object getKey(); public abstract Object getValue(); } } class HashMap implements Map { class Hahs implements Map.Entry { public Object getKey(){} public Object getValue(){} } }
"sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。
希望打印结果:a(1)c(2).....
通过结果发现,每一个字母都有对应的次数。说明字母和次数之间都有映射关系。
注意了,当发现有映射关系时,可以选择map集合。因为map集合中存放就是映射关系。
什么使用map集合呢?
当数据之间存在这映射关系时,就要先想map集合。
思路:
1,将字符串转换成字符数组。因为要对每一个字母进行操作。
2,定义一个map集合,因为打印结果的字母有顺序,所以使用treemap集合。
3,遍历字符数组。
将每一个字母作为键去查map集合。
如果返回null,将该字母和1存入到map集合中。
如果返回不是null,说明该字母在map集合已经存在并有对应次数。
那么就获取该次数并进行自增。,然后将该字母和自增后的次数存入到map集合中。覆盖调用原理键所对应的值。
4,将map集合中的数据变成指定的字符串形式返回。
代码实现如下:
package com.package1; /* * 功能:获取一个字符串“abababcgh”中各个字母出现的次数,并且打印 * 方式:利用TreeMap实现。 */ import java.util.*; import java.util.Map.Entry; public class MapDemo2 { public static void main(String[] args) { String s="sfcnewjgwfvskfksdjfjsakdjjjjj"; Getnum(s); } public static void Getnum(String s) { char[] a=s.toCharArray(); TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>(); //根据数组中的元素,循环查找集合中是否存在 for(int i=0;i<a.length;i++) { Integer values=tm.get(a[i]); //判断values的值 if(values==null) { //将数组中的值put到集合中 tm.put(a[i], 1); } else { values=values+1; tm.put(a[i], values); } } System.out.println(tm); //取出数据 //方式一:entrySet(); /* Set<Map.Entry<Character,Integer>> es =tm.entrySet(); Iterator<Map.Entry<Character, Integer>> it=es.iterator(); //循环取出 while(it.hasNext()) { //me为映射关系 Entry<Character, Integer> me=it.next(); //根据映射关系取出K-V Character c=me.getKey(); Integer in=me.getValue(); System.out.println(c+"("+in+")"); }*/ //取出方式2:keySet(); Set<Character> ks=tm.keySet(); Iterator<Character> it=ks.iterator(); while(it.hasNext()) { Character key=it.next(); //得到K Integer in=tm.get(key); //根据K取出value System.out.println(key+"("+in+")"); } } }