标签:null 练习 返回 system ++ equals 字符串 link java集合
? Map集合是Java提供的用来存放键值对的,是双列集合,用以处理一一对应关系的数据。
Map特点
Map常用子类
Map接口有多个子类,这里主要介绍常用的HashMap集合和LinkedHashMap集合。
HashMap
HashMap采用哈希表结构存储数据,元素无序,同HashSet一样,要保证键的唯一,需要重写键的HashCode()和equals()方法。
LinkedHashMap
LinkedHashMap是HashMap的子类,存储数据采用的是哈希表+链表的结构,能够保证元素有序,同样需要保证键的唯一,需要重写键的HashCode()和equals()方法。
Map接口中常用的方法
public V put(K key, V value)
:将指定的值与集合中指定的键关联public V remove(Object key)
:如果存在,则从集合中移除一个键的映射,返回被删除的元素public V get(Object key)
:返回指定键的值,如果键不存在,则返回nullpublic Set<K> keySet()
:获取Map集合中所有的键,存储到Set集合中public Set<Map.Entry<K,V>> entrySet()
:获取Map集合中所有的键值对对象的集合(Set集合)public class MapDemo1 {
public static void main(String[] args) {
HashMap<String, String> m = new HashMap<String,String>();
// 添加元素
m.put("邓超", "孙俪");
m.put("罗晋", "唐嫣");
m.put("霍建华", "林心如");
// 获取所有的键
Set<String> kSet = m.keySet();
System.out.println(kSet); // 输出:[邓超, 霍建华, 罗晋]
// 获取指定键的值
System.out.println(m.get("罗晋")); // 输出: 唐嫣
// 遍历键集合,获取每一个值
for (String s : kSet) {
String value = m.get(s);
System.out.print(value + " ");
} // 输出:孙俪 林心如 唐嫣
// 删除键值对
System.out.println(m.remove("邓超")); // 输出:孙俪
System.out.println(m.remove("胡歌")); // 输出:null
// put方法,如果key不存在,则是新添加一个键值对,返回null
// 如果key存在,则是修改对应key的值,返回修改前的值
System.out.println(m.put("黄晓明","杨颖")); // 输出:null
System.out.println(m.put("霍建华", "胡歌")); // 输出:林心如
}
}
Map集合的遍历方式
使用键找值的方式:通过元素的键,获取键所对应的值
使用步骤:
public class MapDemo2 {
public static void main(String[] args) {
HashMap<String, String> m = new HashMap<>();
// 添加元素
m.put("邓超", "孙俪");
m.put("罗晋", "唐嫣");
m.put("霍建华", "林心如");
// 获取所有的键
Set<String> kSet = m.keySet();
// 遍历键集合,获取每一个值
for (String s : kSet) {
String value = m.get(s);
System.out.print(value + " ");
} // 输出:孙俪 林心如 唐嫣
}
}
通过Entry键值对对象的方式
Entry接口是Map接口的一个内部接口,所以在调用时候需要使用Map.Entry.
Entry是一个键值对对象,将Map中的每一个键值对封装成了一个对象,所以Map集合中每一个键值对对应一个Entry对象,那么在遍历的时候就可以通过获取所有的键值对对象Entry,再从每一个Entry对象中获取对应的键和值。
Map集合中提供了获取所有的Entry对象的方法:
? public Set<Map.Entry<K, V>> entrySet()
:获取到Map集合中所有的键值对对象的集合。
既然要从Entry对象中获取对应的键和值,那么Entry对象肯定要提供方法供获取,有以下两个方法:
public K getKey()
:获取Entry对象中的键public V getValue()
:获取Entry对象中的值使用Entry对象遍历Map集合的步骤:
public class MapDemo3 {
public static void main(String[] args) {
HashMap<String, String> m = new HashMap<>();
// 添加元素
m.put("邓超", "孙俪");
m.put("罗晋", "唐嫣");
m.put("霍建华", "林心如");
// 获取所有的Entry对象
Set<Map.Entry<String,String>> entrySet = m.entrySet();
// 遍历Entry对象集合,获取Map集合的键和值
for (Map.Entry<String,String> e : entrySet) {
String key = e.getKey();
String value = e.getValue();
System.out.println("key = " + key + ",value = " + value);
}
/*
输出:
key = 邓超,value = 孙俪
key = 霍建华,value = 林心如
key = 罗晋,value = 唐嫣
*/
}
}
Map集合小练习
需求:计算一个字符串中每个字符出现的字数。
public class MapDemo4 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("请输入字符串:");
String str = in.nextLine();
findChar(str);
}
public static void findChar(String str) {
HashMap<Character, Integer> hm = new HashMap<>();
// 遍历字符串
for (int i = 0; i < str.length(); i++) {
Character c = str.charAt(i);
if (hm.get(c) == null) { // 字符不存在
hm.put(c,1);
} else {
int count = hm.get(c);
hm.put(c, count+1);
}
}
// 遍历Map集合
Set<Map.Entry<Character,Integer>> entrySet = hm.entrySet();
for (Map.Entry<Character,Integer> e:entrySet) {
System.out.println(e.getKey() + " = " + e.getValue());
}
}
}
标签:null 练习 返回 system ++ equals 字符串 link java集合
原文地址:https://www.cnblogs.com/LucasBlog/p/12362623.html