目录

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。




java中map和set javamapset用法_java


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());
        }



java中map和set javamapset用法_servlet_02


 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);
}

java中map和set javamapset用法_java中map和set_03

 

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));
    }

java中map和set javamapset用法_jvm_04