Map集合
概述
??Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。
注意?:Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
interface Map<K,V> K:键的类型;V:值的类型
??Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同:
- Collection中的集合,元素是孤立存在的(单身🐕),向集合中存储元素采用一个个元素的方式存储。
- Map中的集合,元素是成对存在的(👫)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
- Collection中的集合称为单列集合,Map中的集合称为双列集合。
??Map 接口主要有两个实现类:HashMap 类和 TreeMap 类。其中,HashMap 类按哈希算法来存取键对象,而 TreeMap 类可以对键对象进行排序。
方法
方法名 | 描述 |
---|
V put(K key,V value) | 添加元素 | V remove(Object key) | 根据键删除值对元素 | void clear() | 移除所有的键值对元素 | boolean containsValue(Object value) | 判断集合是否包含指定的值 | boolean isEmpty() | 判断集合是否为空 | int size() | 集合的长度,也就是集合中键值对的个数 | boolean containsKey(Object key) | 判断集合是否包含指定的键 |
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("花开", "富贵");
map.put("招财", "进宝");
map.put("凹凸曼", "小魔仙");
System.out.println(map);
System.out.println("————————");
map.remove("凹凸曼");
System.out.println(map);
System.out.println("集合值对个数为:"+map.size());
System.out.println("————————");
System.out.println(map.containsValue("富贵"));
System.out.println(map.containsKey("蛤蟆先生"));
map.clear();
map.isEmpty();
}
运行结果:
{凹凸曼=小魔仙, 招财=进宝, 花开=富贵}
————————
{招财=进宝, 花开=富贵}
集合值对个数为:2
————————
true
false
Map集合的获取方法
方法名 | 描述 |
---|
V get(Object key) | 根据键获取值 | Set keySet() | 获取所有键的集合 | Collection values() | 获取所有值的集合 | Set<Map.Entry<K,V>> entrySet() | 获取所有键值对对象的集合 |
这里了解一下知道有这些方法就可,待解析完遍历后在再做详细的讲解
遍历
;Map集合遍历有两种方式:
方式一keySet方法:
我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合
遍历思路:
1. 把所有丈夫集中起来----------->获取所有键的集合。用keySet()方法实现
2. 遍历丈夫的集合,获取到每一个丈夫----------->遍历键的集合,获取到每一个键。用增强for实现
3. 根据丈夫去找对应的妻子----------->根据键去找值。用get(Object key)方法实现
示例:
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("花开", "富贵");
map.put("招财", "进宝");
map.put("凹凸曼", "小魔仙");
Set<String> keySet = map.keySet();
for (String key : keySet) {
String value = map.get(key);
System.out.println(key+","+value);
}
}
运行结果:
凹凸曼,小魔仙
招财,进宝
花开,富贵
方式二entrySet方法: 遍历思路:
1.获取所有结婚证的集合----------->获取所有键值对对象的集合
2. 遍历结婚证的集合,得到每一个结婚证----------->遍历键值对对象的集合,得到每一个键值对对象
用增强for实现,得到每一个Map.Entry
3. 根据结婚证获取丈夫和妻子----------->根据键值对对象获取键和值
用getKey()得到键
用getValue()得到值
示例:
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("花开", "富贵");
map.put("招财", "进宝");
map.put("凹凸曼", "小魔仙");
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> ma : entries) {
String key = ma.getKey();
String value = ma.getValue();
System.out.println(key + "," + value);
}
}
运行结果:
凹凸曼,小魔仙
招财,进宝
花开,富贵
Collections
Collections是针对集合操作的工具类
常用方法:
方法名 | 描述 |
---|
public static void sort(List list) | 将指定的列表按升序排序 | public static void reverse(List<?> list) | 反转指定列表中元素的顺序 | public static void shuffle(List<?> list) | 使用默认的随机源随机排列指定的列表 |
代码实现:
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(30);
list.add(20);
list.add(50);
list.add(10);
list.add(40);
Collections.sort(list);
System.out.println(list);
System.out.println("——————————————————");
Collections.reverse(list);
System.out.println(list);
Collections.shuffle(list);
System.out.println(list);
}
运行结果:
[10, 20, 30, 40, 50]
——————————————————
[50, 40, 30, 20, 10]
[30, 10, 40, 20, 50]
Collection和Collections的区别:
Collection是一个集合接口
Collections是一个包装类,不能实例化
|