Map集合

map集合中存放的都是一组组映射关系 key=value

初识map

和set集合方法使用都差不多 但map可以在集合中允许嵌套

map集合转为javabean map集合keyset_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

  1. 添加集合元素的同时,它可以编辑原有的元素
    如果说集合中没有key对应的value,那么久住集合中添加元素
    如果说集合中对应的key有value值,则代表替换原有的值
  2. 返回替换前key对应的value值

map集合转为javabean map集合keyset_数据结构_02


entrySet ,keySet 是map特有的遍历的方法
但他们的区别就是 entrySet打印取值 (entry 是一个类) 要把键值一对对都找到能打印出来
而keySet可以根据键一一找到值打印输出

map集合转为javabean map集合keyset_字符串_03

在后面之所以乘上数字,是防止键值相加起来和别的键值相加起来是一样的,而被去重复

public int hashCode() {
	return this.getName().hashCode()+this.getAge()*12;
}

TreeMap

它的使用方法和我的上一篇set篇里的TreeSet一样,详情请看我的上一篇

map集合转为javabean map集合keyset_字符串_04

HashMap

map集合中的泛型要使用包装类,或者是引用数据类型

  • 统计字符串中字符出现次数
  • @author Administrator
  • 思考:
  • 1.统计出现次数 2.在根据字母排序

  • 统计功能
  • 1’将字符串转为字符数组,将这个字符串中的字符当做map集合中的key,将出现的次数最为value值
  • 2’将字符第一次出现的时候,那么用在它的集合中进行寻找,返回值必然为null,之后将字符对应的值改为1
  • 3’如果说该字符不是第一次出现,该字符对应的值不为null并且 +1

先自定义一个count方法,再重写

map集合转为javabean map集合keyset_数据结构_05


代码如下

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方法会将原有的值返回