java基础之Map集合

举报
袁袁袁袁满 发表于 2022/04/25 20:30:14 2022/04/25
【摘要】 1.0 Map集合介绍Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。HashMap: 元素按照键是无序,不重复,无索引,值不做要求LinkedHashMap: 元素按照键是有序,不重复,无索引,值不做要求 1.1 Map集合概述和特点Map集合是一种双列集合,每...

1.0 Map集合介绍

  • Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。
    在这里插入图片描述
  • HashMap: 元素按照键是无序,不重复,无索引,值不做要求
  • LinkedHashMap: 元素按照键是有序,不重复,无索引,值不做要求

1.1 Map集合概述和特点

  • Map集合是一种双列集合,每个元素包含两个值
  • Interface Map<K,V>; K:键的类型,V:值的类型
  • Map集合的每个元素的格式:key = value(键值对元素)
  • Map集合也被称为“键值对集合”
  • Map集合特点
    • Map 集合的键是 无序,不重复,无索引的
    • Map 集合后面重复的键对应的元素会 覆盖 前面的整个元素
  • 创建Map集合对象
    • 多态的方式
    • 具体的实现类HashMap

1.2 Map集合的基本方法

方法名 说明
public V put(K key, V value) 添加元素
public V remove(Object key) 根据键删除键值对元素
public void clear() 移除所有键值对元素
public boolean containKey(Object key) [kənˈteɪn] 判断集合是否包含指定的键
public boolean containValue(Object value) 判断集合是否包含指定的值
public boolean isEmpty() 判断集合是否为空
public int size() 集合的长度,也就是集合中键值对个数

1.3 Map集合的获取方法(重点)

方法名 说明
public V get(Object key) 根据键获取值
public Set<K> keySet() 获取所有键的集合,存储到Set集合中
public Collection<V> values() 获取所有值的集合,存储到Collection集合中
public Set<Map.Entry<K,V>> entrySet() 获取所有键值对对象的集合(Set集合)

1.4 Map集合的遍历

  • Map 集合遍历有三种方式
    • "键找值"的方式遍历
    • "键值对"的方式遍历
    • Lambda 表达式(JDK1.8开始之后的新技术)

1.4.1 "键找值"的方式遍历(常用)

  • 1、获取所有键的集合:用keySet()方法实现
  • 2、遍历键的集合,获取到每一个键:用增强for遍历实现
  • 3、根据键去找值:在增强for中,用get(Object key)方法实现
package ceshi;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();

        //public V put(K key, V value) 	添加元素
        map.put("y1", "10");
        map.put("y2", "20");
        map.put("y3", "30");
        System.out.println(map); //{y1=10, y2=20, y3=30}

        //1、获取所有键的集合:用keySet()方法实现
        Set<String> keySet = map.keySet();

        //2、遍历键的集合,获取到每一个键:用增强for遍历实现
        for (String key : keySet) {
            //3、根据键去找值:在增强for中,用get(Object key)方法实现
            String value = map.get(key);
            System.out.println(key + "=" + value);
            /*
            y1=10
            y2=20
            y3=30*/
        }
    }
}

1.4.2 "键值对"的方式遍历

  • 1、获取所有键值对对象的集合:Set<Map.Entry<K,V>> entrySet()
  • 2、遍历键值对对象的集合,得到每一个键值对对象:用增强for实现,得到每一个Map.Entry
  • 3、根据键值对对象获取键和值:在增强for中,用geKey()得到键;用getValue()得到值
package ceshi;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();

        //public V put(K key, V value) 	添加元素
        map.put("y1", "10");
        map.put("y2", "20");
        map.put("y3", "30");
        System.out.println(map); //{y1=10, y2=20, y3=30}

        //1、获取所有键值对对象的集合:Set<Map.Entry<K,V>> entrySet()
        Set<Map.Entry<String, String>> entrySet = map.entrySet();

        //2、遍历键值对对象的集合,得到每一个键值对对象:用增强for实现,得到每一个Map.Entry
        for(Map.Entry<String, String> me:entrySet) {
            //3、根据键值对对象获取键和值:在增强for中,用geKey()得到键;用getValue()得到值
            String key = me.getKey();
            String value = me.getValue();
            System.out.println(key+"="+value);
            /*
            y1=10
            y2=20
            y3=30*/
        }
    }
}

1.4.3 Lambda [ˈlæmdə] 表达式方式遍历

package ceshi;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();

        //public V put(K key, V value) 	添加元素
        map.put("y1", "10");
        map.put("y2", "20");
        map.put("y3", "30");
        System.out.println(map); //{y1=10, y2=20, y3=30}

        map.forEach((k , v) -> {
            System.out.println(k+"="+v);
            /*
            y1=10
            y2=20
            y3=30*/
        });
    }
}

1.5 Map集合存储自定义类型

  • Map集合的键和值都可以存储自定义类型
  • 如果希望Map集合认为自定义类型的键对象重复了,必须重写对象的hashCode()equals()方法

1.6 LinkedHashMap(HashMap子类)

  • LinkedHashMap集合是有序不重复的键值对集合
public class LinkedHashMapDemo {
    public static void main(String[] args) {
        Map<String , Integer> map = new LinkedHashMap<>();
        map.put("y1",10);
        map.put("y2",20);
        map.put("y3",30); 
        map.put("y3",100); //键不变,只是替换其值
        
        System.out.println(map);// {y1=10, y2=20, y3=100}   
    }
}

1.7 TreeMap

  • TreeMap 集合按照键是可排序不重复的键值对集合(默认升序)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。