目录
1.Map和Set在Java集合框架中的位置
2.Map接口
2.1关于Map
2.2关于Map.Entry,v>
2.3Map的常用方法说明
2.4 HashMap的使用案例
2.4.1添加
2.4.2查询
2.4.3遍历
3.Set接口
3.1关于Set
3.2常见方法说明
3.3LinkedHashSet的使用案例
3.3.1添加
3.3.2判断是否包含某个元素
1.Map和Set在Java集合框架中的位置
Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces和其实现类 classes 。
类和接口总览图如下,Set继承自collection,Map没有继承自collection。
2.Map接口
2.1关于Map
Map 是一个接口类,该类没有继承自 Collection ,该类中存储的是 <K,V> 结构的键值对,并且 K 一定是唯一的,不能重复 。
2.2关于Map.Entry
Map.Entry<K, V> 是 Map 内部实现的用来存放 <key, value> 键值对映射关系的内部类 ,该内部类中主要提供了<key, value> 的获取,value的设置以及Key的比较方式。
方法 | 解释 |
K getKey() | 返回 entry 中的 key |
V getValue() | 返回 entry 中的 value |
V setValue(V value) | 将键值对中的value替换为指定value |
2.3Map的常用方法说明
方法 | 解释 |
V get (Object key) | 返回 key 对应的 value |
V getOrDefault (Object key, V defaultValue) | 返回 key 对应的 value , key 不存在,返回默认值 |
V put (K key, V value) | 设置 key 对应的 value |
V remove (Object key) | 删除 key 对应的映射关系 |
boolean containsKey (Object key) | 判断是否包含 key |
boolean containsValue (Object value) | 判断是否包含value |
注意:
1. Map 是一个接口,不能直接实例化对象 ,如果 要实例化对象只能实例化其实现类 TreeMap 或者 HashMap
2. Map 中存放键值对的 Key 是唯一的, value 是可以重复的
3. 在 TreeMap 中插入键值对时, key 不能为空,否则就会抛 NullPointerException 异常 , value 可以为空。但是 HashMap 的 key 和 value 都可以为空。
4. Map 中的 Key 可以全部分离出来,存储到 Set 中 来进行访问 ( 因为 Key 不能重复 ) 。
5. Map 中的 value 可以全部分离出来,存储在 Collection 的任何一个子集合中 (value 可能有重复 ) 。
6. Map 中键值对的 Key 不能直接修改, value 可以修改,如果要修改 key ,只能先将该 key 删除掉,然后再来进行重新插入。
2.4 HashMap的使用案例
2.4.1添加
使用mao.put()添加元素。
public class MapUsage {
public static void main(String[] args) {
Map<String,String>map=new HashMap<>();
//增加 put
map.put("白柳","黑桃");
map.put("谢怜","花城");
map.put("江添","盛望");
//添加顺序和保存顺序无关
System.out.println("增添了三组<k,v>:");
System.out.println(map);
//put的两个用法:添加+更新,若k不存在,将新的键值对加入,若k存在,则更新对应v
System.out.println("若k不存在,将新的键值对加入:");
map.put("白六","红桃");
System.out.println(map);
map.put("白六","无");
System.out.println("若k存在,则更新对应v:");
System.out.println(map);
}
}
2.4.2查询
使用map.get()和map.getOrDefault()进行查询。
//查询
//根据k返回v
System.out.println("查询key=白柳时的value:");
System.out.println(map.get("白柳"));
//根据k查询v,若查不到,返回默认值
System.out.println("根据k查询v,若查不到,返回默认值:");
System.out.println(map.getOrDefault("小女巫","修女"));
2.4.3遍历
由于Map没有继承自Collection,所以需要将Map先转为Set,才能进行遍历。
使用entry.getKey()和entry.getValue()获取key集合,value集合。
//遍历 先转为set类才能遍历
Set<Map.Entry<String,String>>set=map.entrySet();
for(Map.Entry<String,String>entry:set){
System.out.println(entry.getKey()+"->"+entry.getValue());
}
3.Set接口
3.1关于Set
Set 与 Map 主要的不同有两点: Set 是继承自 Collection 的接口类, Set 中只存储了 Key 。
Set是保存单个不重复元素的集合!
3.2常见方法说明
方法 | 解释 |
boolean add(E e) | 添加元素,但重复元素不会被添加成功 |
boolean contains (Object o) | 判断 o 是否在集合中 |
注意:
1. Set 是继承自 Collection 的一个接口类
2. Set 中只存储了 key ,并且要求 key 一定要唯一
3. TreeSet 的底层是使用 Map 来实现的,其使用 key 与 Object 的一个默认对象作为键值对插入到 Map 中的
4. Set 最大的功能就是对集合中的元素进行去重
5. 实现 Set 接口的常用类有 TreeSet 和 HashSet ,还有一个 LinkedHashSet , LinkedHashSet 是在 HashSet 的基础
上维护了一个双向链表来记录元素的插入次序。
6. Set 中的 Key 不能修改,如果要修改,先将原来的删除掉,然后再重新插入
7. TreeSet 中不能插入 null 的 key , HashSet 可以。
3.3LinkedHashSet的使用案例
3.3.1添加
使用set.add()添加元素。(重复元素不会添加)
public static void main(String[] args) {
Set<Integer>set=new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
System.out.println(set.add(3));
System.out.println(set);
}
3.3.2判断是否包含某个元素
使用map.contains()判断。
public static void main(String[] args) {
Set<Integer>set=new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
System.out.println(set.add(3));
System.out.println(set);
System.out.println(set.contains(1));
System.out.println(set.contains(5));
}