Map集合:
1.Map集合与Collection集合的区别:
1.Collection中的集合,元素是孤立存在的,向集合中存储元素采用一个个元素的方式存储。
2.Map中的集合1,元素是成对存在的,每个元素由键合值两个部分组成,通过键可以找到对应的值。
3.Collection中的集合称为单列集合,而Map中的集合称为双列集合。
4.Map中的集合不能包含重复的键,但可以有重复值;每个键只能有一个值。
2.Map中常用的子类:
。HashMap:存储数据采用的哈希表结构,元素的存储顺序不能保持一致。由于要保证键的唯一,不重复,所以要重写hashCode()方法和equal()方法。
。LinkHashMap:通过链表结构可以保证元素的存储顺序一致,同样也要重写hashCode()方法和equals()方法。
3.Map接口中的常用方法:
public v put(K key,V value): 把指定的键与指定的值添加到Map集合中。
public v remove(Object key): 把指定的键对应的元素在对应的集合中删除,返回的是被删除的元素的值
public V get(Object key) :根据指定的键在Map集合中获取对应的值
public boolean containsKey(Object key) :判断当前对象是否存在于集合中
public Set<K> keySet() :获取Map集合中的所有键,存储到set集合中
public Set<Map.Entry<K,V>> entrySet()
: 获取到Map集合中所有的键值对对象的集合(Set集合)。
Map接口的方法演示:
import java.util.HashMap;
public class MapDemo {
public static void main(String[] args) {
HashMap<String,String> hashMap = new HashMap<String,String>();
hashMap.put("刀锋之影", "泰隆");
hashMap.put("刀锋意志", "艾瑞莉娅");
hashMap.put("放逐之刃", "瑞文");
hashMap.put("疾风剑豪", "亚索");
System.out.println(hashMap);
System.out.println("--------------------------------");
System.out.println(hashMap.remove("放逐之刃"));
System.out.println(hashMap);
System.out.println("--------------------------------");
System.out.println(hashMap.get("疾风剑豪"));
}
}
打印结果:
{刀锋意志=艾瑞莉娅, 疾风剑豪=亚索, 放逐之刃=瑞文, 刀锋之影=泰隆}
--------------------------------
瑞文
{刀锋意志=艾瑞莉娅, 疾风剑豪=亚索, 刀锋之影=泰隆}
--------------------------------
亚索
注:使用put方法时,若指定的键(key)在集合中没有,则新增;若指定的键在集合中存在,把指定键对应的值,替换成对应的新值。
4.Map集合遍历键找值得方式:
键找值方式:即通过元素中的键,获取键所对应的值
分析步骤:
- 获取Map中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键。方法提示:
keyset()
- 遍历键的Set集合,得到每一个键。
- 根据键,获取键所对应的值。方法提示:
get(K key)
代码演示:
import java.util.HashMap;
import java.util.Set;
public class MapDemo {
public static void main(String[] args) {
HashMap<String,String> hashMap = new HashMap<String,String>();
hashMap.put("刀锋之影", "泰隆");
hashMap.put("刀锋意志", "艾瑞莉娅");
hashMap.put("放逐之刃", "瑞文");
hashMap.put("疾风剑豪", "亚索");
//获取所有键, 获取键值
Set<String> keySet = hashMap.keySet();
//获取对应的值
for(String key : keySet) {
System.out.println(key+":"+hashMap.get(key));
}
}
}
打印结果:
刀锋意志:艾瑞莉娅
疾风剑豪:亚索
放逐之刃:瑞文
刀锋之影:泰隆
5.Entry键值对对象
我们已经知道,Map
中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在Map
中是一一对应关系,这一对对象又称做Map
中的一个Entry(项)
。Entry
将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历Map
集合时,就可以从每一个键值对(Entry
)对象中获取对应的键与对应的值。
既然Entry表示了一对键和值,那么也同样提供了获取对应键和对应值得方法:
public K getKey()
:获取Entry对象中的键。public V getValue()
:获取Entry对象中的值。
在Map集合中也提供了获取所有Entry对象的方法:
public Set<Map.Entry<K,V>> entrySet()
: 获取到Map集合中所有的键值对对象的集合(Set集合)。
6.Map集合遍历键值对方式:
键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。
操作步骤:
- 获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。方法提示:
entrySet()
。 - 遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象。
- 通过键值对(Entry)对象,获取Entry对象中的键与值。 方法提示:
getkey() getValue()
案例演示:
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
public class MapDemo {
public static void main(String[] args) {
HashMap<String,String> hashMap = new HashMap<String,String>();
hashMap.put("刀锋之影", "泰隆");
hashMap.put("刀锋意志", "艾瑞莉娅");
hashMap.put("放逐之刃", "瑞文");
hashMap.put("疾风剑豪", "亚索");
//获取所有的 entry对象 entrySet
Set<Entry<String,String>> entrySet = hashMap.entrySet();
//遍历得到每一个entrySet对象
for(Entry<String,String> entry : entrySet) {
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
}
打印结果:
刀锋意志:艾瑞莉娅
疾风剑豪:亚索
放逐之刃:瑞文
刀锋之影:泰隆
注:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了。