Java- 进阶:集合框架 3
方法返回值为键所对应的值
1. 使用 put 方法时,若指定的键(key)在集合中没有,则没有这个键对应的值,返回?null,并把指定的键值?添加?到集合中;?2. 使用 put 方法时,若指定的键(key)在集合中?存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换?成指定的新值。3.
get(Object key)
?: 获取指定键(key)所对应的值(value)
如果集合中没有这个键,返回?null
remove(Object key)
:根据指定的键(key)删除元素,返回?被删除元素的值(value)如果集合中没有这个键,返回?null
3. Map 集合遍历—— keySet 方法
keySet 方法:把所有的?键,存储到?
Set集合
遍历步骤:
调用 map 集合的方法?keySet 方法,把所有的键存储到?Set 集合?中
遍历 Set 集合,获取出 Set 集合中的?所有元素 (Map 中的键)
调用 map 集合?get 方法,通过键获取到值
public class MapDemo {public static void main(String[] args) {Map<String,Integer> map = new HashMap<String,Integer>();map.put("a", 11);map.put("b", 12);map.put("c", 13);map.put("d", 14);
Set<String> set = map.keySet();Iterator<String> it = set.iterator();
while(it.hasNext()){String key = it.next();Integer value = map.get(key);System.out.println(key+"...."+value);}
//利用加强 for 遍历 for(String key : map.keySet()){Integer value = map.get(key);System.out.println(key+"...."+value);}
4. Entry 接口
在 Map 类设计时,提供了一个嵌套接口:
Entry
。Entry 将键值对的对应关系封装成了对象。即?键值对对象,这样我们在遍历 Map 集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值Entry 是 Map 接口中提
供的一个?静态内部嵌套接口
Map.Entry(K, V)
entrySet()方法
:用于返回 Map 集合中所有的?键值对(Entry)对象,以?Set集合
?形式返回。
5. Map 集合遍历——Entry
键值对方式: 即通过集合中每个?键值对(Entry)对象,获取键值对(Entry)对象中的键与值。
遍历步骤:
调用 map 集合方法?
entrySet()
?,将集合中的映射关系对象,存储到 Set 集合遍历?包含键值对(Entry)对象的 Set 集合,得到每一个键值对(Entry)对象
通过键值对(Entry)对象,用?
getKey
、getValue
?获取 Entry 对象中的?键与值。
Map 集合不能直接使用 迭代器 或者?增强 for?进行遍历。但是转成?Set?之后就可以使用了。
public class MapSet {public static void main(String[] args) {Map<Integer,String> map = new HashMap<>();map.put(1,"a");map.put(2,"ab");map.put(3,"abc");
//调用 map 集合方法 entrySet(),将集合中的映射关系对象,存储到 Set 集合 Set<Map.Entry<Integer,String>> set = map.entrySet();//遍历 Set 集合 Iterator<Map.Entry<Integer,String>> it = set.iterator();while(it.hasNext()){//获取 Set 集合中的元素,也就是映射关系对象//it.next 获取是 Map.Entry 对象 Map.Entry<Integer,String> entry = it.next();//通过键值对(Entry)对象,用 getKey、getValue 获取 Entry 对象中的 键与值 Integer key = entry.getKey();String value = entry.getValue();System.out.println(key+" : "+value);}}//增强 for 循环 for(Map.Entry<Integer,String> entry : map.entrySet()){System.out.println(entry.getKey()+" : "+entry.getValue());}}
6. HashMap 存储自定义类型键值
当给 HashMap 中存放自定义对象时,如果自定义对象作为?key?存在,这时要保证?对象唯一,必须复写对象的?hashCode?和?equals 方法
如果要保证 map 中存放的 key 和 取出的顺序一致,可以使用?LinkedHashMap?集合来存放。
二、集合继承体系的面向对象思想
接口:用来明确所有集合中该具有的功能,相当于在定义集合功能标准;
抽象类:把多个集合中功能实现方式相同的方法,抽取到抽象类实现,具体集合不再编写,继承使用即可;
具体类:继承抽象类,实现接口,重写所有抽象方法,达到具备指定功能的集合。每个具体集合类,根据自身的数据存储结构方式,对接口中的功能方法,进行不同方式的实现。
![](https://static001.geekbang.org/infoq/b0/b0ba887499f69ccae1759e385af06d59.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
三、数组和 List 的相互转化
1. Collction 转化为数组
用
Arrays.asList
?得到的 List,不允许向其中添加元素,或者删除其中的元素,因为是?线程不安全的集合,必须转化为?线程安全?的集合Collections.synchronizedList(list)
:将 list 转化为线程安全的集合Collections.synchronizedList(set)
Collections.synchronizedList(map)
public class Supplement01 {public static void main(String[] args) {
//int[] a = {1, 2, 3, 4};//将数组转化为集合
评论