Map集合
map集合中存放的都是一组组映射关系 key=value
初识map
和set集合方法使用都差不多 但map可以在集合中允许嵌套
常见方法
1、增加
put(K key, V value)
putAll(Map<? extends K,? extends V> m)
2、删除
clear()
remove(Object key)
3、判断
containsKey(Object key)
containsValue(Object value)
isEmpty()
4、获取
get(Object key)
size()
values()
entrySet()
keySet()
put
- 添加集合元素的同时,它可以编辑原有的元素
如果说集合中没有key对应的value,那么久住集合中添加元素
如果说集合中对应的key有value值,则代表替换原有的值- 返回替换前key对应的value值
entrySet ,keySet 是map特有的遍历的方法
但他们的区别就是 entrySet打印取值 (entry 是一个类) 要把键值一对对都找到能打印出来
而keySet可以根据键一一找到值打印输出
在后面之所以乘上数字,是防止键值相加起来和别的键值相加起来是一样的,而被去重复
public int hashCode() {
return this.getName().hashCode()+this.getAge()*12;
}
TreeMap
它的使用方法和我的上一篇set篇里的TreeSet一样,详情请看我的上一篇
HashMap
map集合中的泛型要使用包装类,或者是引用数据类型
- 统计字符串中字符出现次数
- @author Administrator
- 思考:
- 1.统计出现次数 2.在根据字母排序
- 统计功能
- 1’将字符串转为字符数组,将这个字符串中的字符当做map集合中的key,将出现的次数最为value值
- 2’将字符第一次出现的时候,那么用在它的集合中进行寻找,返回值必然为null,之后将字符对应的值改为1
- 3’如果说该字符不是第一次出现,该字符对应的值不为null并且 +1
先自定义一个count方法,再重写
代码如下
private static String count(String str) {
char[] charArray = str.toCharArray();
Map<Character, Integer> map = new TreeMap<>();
for (char c : charArray) {
Integer value = map.get(c);
if (value == null) {
map.put(c, 1);
}else {
map.put(c, ++value);
}
}
StringBuffer sb = new StringBuffer();
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
sb.append(entry.getKey()+"("+entry.getValue()+")");
}
return sb.toString();
}
小结:
Map
Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合石线程同步的,jdk1.0,效率低
HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。将Hashtable替代;jdk1.2,效率高
TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序
注意:
添加元素时,如果键已经在集合中存在,那么后添加的值会覆盖原来的值,并且put方法会将原有的值返回