1.HashMap和LinkedHashMap
*HashMap和LinkedHashMap分别是无序和有序的
*HasTable(了解即可)
HashTable的低层是一个哈希表,是最早期的双列集合,它是同步的
HashTable不能存储空值/空键
2.Map接口中常用的方法
1)V put(K k,V v);
返回值:如果Key已经存在,则返回旧的Value并将新的Value替换进集合
如果Key不存在,则返回null并将Value添加进集合
2)remove(Object k)
返回值:如果Key已经存在,则返回删除的Value
如果Key不存在,则返回null
3)V get(Object key)
返回值:如果Key已经存在,则返回对应的Value
如果Key不存在,则返回null
4)boolean containsKey(Object key)
5)Map集合的遍历
*Set<K> keySet() 方法返回一个Set<实现类>对象 再使用V get(Object Key)方法遍历
示例代码:
[AppleScript] 纯文本查看 复制代码 public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("赵丽颖", 168);
map.put("杨颖", 161);
map.put("林志玲", 178);
//使用增强for遍历
for (String key : map.keySet()) {
System.out.println(key + "身高" + map.get(s));
}
System.out.println("=======================");
//使用迭代器遍历
Iterator<String> it = keySet.iterator();
while(it.hasNext()) {
String key = it.next();
System.out.println(key + "=" + map.get(key));
}
}
*Map.Entry<K,V>静态内部接口,使用entrySet返回该接口的实现类的Set集合
使用增强for遍历
*Enery:节点 是一个Map接口中的一个静态内部接口
示例代码:
[JavaScript] 纯文本查看 复制代码 public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("赵丽颖", 168);
map.put("杨颖", 161);
map.put("林志玲", 178);
//使用增强for遍历
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey()+ "=" + entry.getValue());
}
}
3.Map接口的练习
需求: 键盘录入一个字符串, 计算一个字符串中每个字符出现次数
分析:
1)使用Scanner获取用户输入的字符串
2)创建Map集合,key是字符串中的字符,value是字符的个数
3)遍历字符串,获取每一个字符
4)使用获取到的字符,去Map集合判断key是否存在 containsKey()
key存在:
通过字符(key),获取value(字符个数)
put(key,++value)把新的value存储到Map集合中
key不存在:
put(key,1)
5)输出结果
示例代码:
[AppleScript] 纯文本查看 复制代码 [mw_shl_code=applescript,true]public static void main(String[] args) {
//使用Scanner获取用户输入的字符串
System.out.println("请输入字符串");
string str = new Scanner(System.in).next();
char[] chars = str.toCharArray();
//创建Map集合
Map<Character,Integer> map = new HashMap<>();
/*使用获取到的字符,去Map集合判断key是否存在 containsKey()
key存在:
通过字符(key),获取value(字符个数)
put(key,++value)把新的value存储到Map集合中
key不存在:
put(key,1)
*/
for (char aChar : chars) {
if(!map.containsKey(aChar)) map.put(aChar,1);
else map.put(aChar,map.get(aChar)+1);
}
//遍历集合输出结果
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey()+"出现的次数为"+entry.getValue());
}
}[/mw_shl_code]
4.集合接口的静态方法(JDK9)
1)java.util.List接口:
static List<E> of(E...e):返回包含指定元素的不可变List集合
2)java.util.Sst接口:
static Set<E> of(E...e):返回包含指定元素的不可变Set集合
3)java.util.Map接口:
static Set<E> of(K k1,V v1,...):返回包含指定键值对的不可变Map集合
4)注意事项
*of方法只适用于List接口,Set接口,不适用于接口的实现类
*of方法返回值是一个不能改变的集合,集合不能再使用add,put方法添加元素,会抛出异常
*Set接口和Map接口在调用of方法时,不能有重复的元素,否则会抛出异常
5)使用of方法快速创建一个可变的集合
*ArrayList<Integer> arrayList = new ArrayList<>(List.of(1, 2, 3));
*HashSet<Integer> arrayList = new HashSet<>(List.of(1, 2, 3));
*HashMap<Integer,String> arrayList = new HashMap<>(List.of(1,"a", 2,"b", 3,"c"));
|
|