标签:character 节点 spl 获取值 集中 方式 isp 构造 ash
很明显这是个泛型接口,而且接受的是两个参数:K、V。K代表的是Key,V代表Value。Map存放的是一系列的键值对,每个键都映射到一个值上。
Map 接口提供三种collection 视图,允许以键集(keySet)、值集(values)或键-值映射关系集(entrySet)的形式查看某个映射的内容。
该方法返回一个Set集合,类型为Map键的类型K。该 set 受映射支持,也就是说,当我们更改set键集时,原hashMap也会受到相同的更改,这是非常可怕的一点。
当我们要对hashMap进行遍历时,可通过该方法来获取hashMap的键集合,从而通过迭代器来对键进行遍历以获取Map中存放的值。
//获取键集并遍历获取值 Set keySets = hashMap.keySet(); for (Object key : keySets) { hashMap.get(key); }
返回此映射中包含的值的 Collection
视图。该 collection 受映射支持,跟上面的Set相同,在我们改变某个值的时候,hashMap也会受到影响。在仅需要知道值而忽略键的遍历时可以用到该方法。遍历方式同样是使用迭代器(加强for循环)。
这是Map中最重要的一个视图,它返回的是键值对的set集合,就是说set中的每一个元素都是一个Map中的键值对。该 set 受映射支持。
entrySet返回一个Set<Map.Entry<K,V>>集合,集合中元素类型为Map.Entry类型,这是Map接口中的一个内部接口,在Map的实现类如HashMap等有其实现类,代表着Map中的一个个节点。
entrySet中的方法:
containsKey(Object key) 判断Map中是否包含该键
containsValue(Object value) 判断Map中是否存在该value
get(Object key) 通过键来获取其在Map中映射的值
put(K key, V value) 添加键值对,如果该键已存在的话,将把原有值覆盖
putAll(Map<? extends K,? extends V> m) 添加Map对象中的所有键值对
remove(Object key) 通过键移除映射关系
size() 获取Map中存在的键值对数量
我这里采用hashMap来实现,首先我们要将字母次数加入Map中,字母作为键,出现次数作为值:
HashMap<Character, Integer> hmc = new HashMap(); for (char c : str.toCharArray()) { //如果该字母已存在于Map中,则将其次数(值)加一,否则添加该键,值为1 if (hmc.containsKey(c)) { int count = hmc.get(c); hmc.put(c, ++count); } else { hmc.put(c, 1); } }
其次我们需要找到值为2的键值对,获取该键值对的键(字母)在字符串中第一次出现的位置(indexOf),并通过一个中间变量来存储。接着我们以打擂台的形式取得第一次出现位置最小的键,就是我们要找的那个字母啦:
Set set = hmc.entrySet(); //获取键值对集 int index = -1; //要找的字母的位置 for (Object object : set) { Entry node = (Entry)object; //键值对集中的元素,即Entry节点 char key = (char) node.getKey(); //获取键(字母) if((int)node.getValue()==2) { int num = str.indexOf(key); //该键(字母)在字符串中第一次出现的位置 if(index==-1 || str.indexOf(key)<index){ //打擂台,谁小取谁 index = str.indexOf(key); } } }
标签:character 节点 spl 获取值 集中 方式 isp 构造 ash
原文地址:https://www.cnblogs.com/JuanF/p/9332497.html