Map接口下的集合于collection接口下的集合存储数据的方式是不同的,Map中是以键值对的方式存在的。示例以下:数组
Map以k-v的形式存在数据结构
map中不能有重复的键,可是值能够重复。每个键只能对应与本身相对应的一个值spa
HashMap:存储市局结构使用的是哈希表结构,元素存取顺序不能保证一致,因为hashMap须要保证键的惟一,因此通常重写键的hashCode()方法,equals()方法。code
LinkedHashMap:HashMap下的子类,存储数据结构是哈希表+链表结构,经过链表结构能够保证存取数据的有序性,经过hash表的方式能够确保键的惟一性,不须要重写hashCode方法和equals方法。对象
Map中经常使用的方法有如下几个:blog
public V put(K key,V value):
将指定的键与值提添加到map接口
public V remove(Object key):
将指定的键以及对应的value从map中删除,返回被删除的元素rem
public V get(Object key)
:根据指定的键,在Map集合中获取对应的值。字符串
public Set<K> keySet()
: 获取Map集合中全部的键,存储到Set集合。get
public Set<Map.Entry<K,V>> entrySet()
: 获取到Map集合中全部的键值对对象的集合(Set集合)。
代码示例:
1 public static void main(String[] args) { 2 HashMap<Integer,String> map = new HashMap<>(); 3 //在map中加入元素 4 map.put(1,"熊大"); 5 map.put(2,"熊二"); 6 map.put(3,"光头强"); 7 System.out.println(map); 8 9 //remove 10 String remove = map.remove(2); 11 System.out.println(remove);//熊二 12 13 //get 14 String s = map.get(3); 15 System.out.println(s);//光头强 16 }
注意:使用put方法时,若指定的键(key)在集合中没有,则没有这个键对应的值,返回null,并把指定的键值添加到集合中;若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换成指定的新值。
方式1:经过map的键来查找值
1 public static void main(String[] args) { 2 HashMap<Integer,String> map = new HashMap<>(); 3 //在map中加入元素 4 map.put(1,"熊大"); 5 map.put(2,"熊二"); 6 map.put(3,"光头强"); 7 8 //获取key的集合 9 Set<Integer> set = map.keySet(); 10 //遍历key集合 11 for (Integer key : set) {//key就是map集合的key 12 //打印key对应的value 13 System.out.println(key+":"+map.get(key)); 14 } 15 }
方法二:经过Entry来获取对象
1 public static void main(String[] args) { 2 HashMap<Integer,String> map = new HashMap<>(); 3 4 //在map中加入元素 5 map.put(1,"熊大"); 6 map.put(2,"熊二"); 7 map.put(3,"光头强"); 8 9 //获取entry对象 10 Set<Map.Entry<Integer, String>> entries = map.entrySet(); 11 //遍历entry对象 12 for (Map.Entry<Integer, String> entry : entries) { 13 Integer key = entry.getKey(); 14 String value = entry.getValue(); 15 16 System.out.println(key+":"+value); 17 } 18 }
获取一个字符串中每一个字母出现的次数
1 public static void main(String[] args) { 2 String s = "you-are-my-shine,baby"; 3 //用字符数组中的每一个字符做为K,出现次数做为V 4 HashMap<Character, Integer> map = new HashMap<>(); 5 6 //遍历字符串 7 for (int i = 0; i <s.length() ; i++) { 8 //转换为字符 9 char k = s.charAt(i); 10 //判断是否包含字符 11 //不包含说明是第一次put 12 if (!map.containsKey(k)){ 13 map.put(k,1); 14 }else { 15 //包含,先获取已经有的次数,而后++,put进去 16 Integer v = map.get(k); 17 map.put(k,++v); 18 } 19 } 20 System.out.println(map); 21 }