Map集合
Map接口下的集合与Collection接口下的集合存储数据的形式不同。
- Collection中的集合是孤立存在的
Map中的集合元素是成对存在的
Map中的集合不能包含重复的键,但是值可以重复,每个键对应一个值
Map接口中的常用方法
public V put(K key,V value)
:把指定的键与指定的值添加到Map集合中public V remove(Object key)
:把指定的键值对元素从Map集合中删除,返回被删除的元素的值public V get(Object key)
:根据指定的键,从Map集合返回对应的值public Set<K> keySet()
:获取Map集合中所有的键,存储到Set集合中public Set<Map.Entry<K,V>> entrySet()
:获取Map集合中所有的键值对对象的集合Map接口方法演示
public class MapDemo{
public static void main(String[] args){
//创建Map对象
HashMap<String,String> map = new HashMap<>();
//添加元素
map.put("杨过","小龙女");
map.put("伊利丹","一粒蛋");
System.out.println(map);
//移除元素
System.out.println(map.remove("杨过"));
//查询元素
System.out.println(map.get("伊利丹"));
}
}
tips:
使用put方法时,若指定的键不存在于集合中,则返回null并且将指定的键值放入集合
若指定的键已经存在于集合中,那将会用新值替换旧值并返回旧值
Map集合遍历方式
主要通过各值所对应的键来找寻
步骤:
1.利用keySet()方法,获取Map中所有的键组成的Set集合
2.遍历键的Set集合,获取每一个键
3.利用Map集合get()方法,传入每一个键以获取对应的值
代码:
public class MapDemo01{
public static void main(String[] args){
//创建一个Map集合对象
HashMap<String,Integer> map = new HashMap<>();
map.put("卢来佛祖",513);
map.put("孙悟空",0);
map.put("八戒",1111);
//获取所有的键
Set<String> set = map.keySet();
//遍历键集合
for (String key : set){
Integer i = map.get(key);
System.out.println(key + "=" + i);
}
}
}
Entry键值对对象
Map集合中存放了两种对象,一种成为键,另一种为值,在Map他们时一一对应的,而这一对对象又被称为Map中的一个Entry,Entry将键值对的对应关系封装成了对象,即键值对对象,如此在遍历Map的时候也可以从每一个键值对对象中获取键与对应的值
键值对相关方法
public K getKey()
:获取Entry对象中的键public V getValue()
:获取Entry对象中的值
Map集合中也提供了获取键值对对象的方法public Set<Map.Entry<K,V>> entrySet()
:获取Map集合中所有的键值对对象的集合
Map集合遍历键值对对象
可以通过遍历集合中的每个键值对对象,获取对应的键与值
步骤:
1.获取Map集合中所有的键值对对象
2.遍历此键值对对象的Set集合,获取每一个键值对对象
3.调用键值对对象的方法获取其键与值
public class MapDemo02{
public static void main(String[] args){
//创建一个Map集合对象
HashMap<String,Integer> map = new HashMap<>();
map.put("卢来佛祖",513);
map.put("孙悟空",0);
map.put("八戒",1111);
//获取所有键值对对象
Set<Entry<String,Integer>> entrySet = map.entrySet();
//遍历每一个键值对对象
for (Entry<String,Integer> entry : entrySet){
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + "=" + value);
}
}
}
tips:
Map集合不能直接使用迭代器或者增强for遍历,但是利用其键值对对象Set集合或者键的Set集合就可以遍历了
当HashMap中存储自定义类型的对象时,为了保证键唯一,需要重写该类的hashCode()和equals()方法
如要保证Map中存取键值一致,则可以使用LinkedHashMap集合存放
JDK9对集合添加的优化
java9中添加了几种集合工厂方法,可以更方便地创建少量元素的集合。
新的List,Set,Map的静态工厂方法可以更方便地创建集合的不可变实例
例子
public class HelloJDK9{
public static void main(String[] args){
Set<Integer> set = Set.of(1,3,5,7,9);
Map<String,Integer> map = Map.of("a",1,"b",3);
List<String> list = List.of("v","e","r");
}
}
注意事项
1.of()方法只是Map,List,Set三个接口的静态方法,其父类和子类实现没有这类方法
2.返回的集合是不可变的