Map集合介绍

本文详细介绍了Map集合的特点、实现类、常用方法及遍历方式,包括HashMap、LinkedHashMap和Properties集合的使用。此外,还讲解了可变参数的基本使用和集合嵌套的相关知识。
摘要由CSDN通过智能技术生成

Map集合

目标:

-能够说出Map集合特点
-使用Map集合添加方法保存数据
-使用”键找值”的方式遍历Map集合
-使用”键值对”的方式遍历Map集合
-能够使用HashMap存储自定义键值对的数据
-能够使用可变参数

内容介绍:

Map集合特点
Map集合的遍历方式
方法可变参数
斗地主案例排序
集合的嵌套

一、Map集合【重点】

1. Map集合的特点

java.util.Mao<K,V>接口: 
	双列集合根接口,内部定义的方法,子接口/实现类都有。
    K: 键的类型,唯一。
    V: 值的类型,可以重复。
    和java.util.Collection<T>接口: 单列集合的跟接口,无关的
    
Map<K,V>接口的特点: 
	1.键唯一,值可以重复。
	2.一个键对应一个值,叫一一对应关系(映射关系/键值对关系)
	3.依靠键维护映射关系(可以通过键获取到值,但是不能通过值获取键)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7t3nVHiM-1668257826894)(../黑马JavaSE就业班/day08(Map集合)]-403-含视频/05_笔记/img/1601287013534.png)

2. Map集合实现类的特点

Map接口常用实现类: 
java.util.HashMap<K,V>集合特点			----使用
    1.键具备哈希特性:
    	哈希表 数组 + 单向链表/红黑树(链表数量 > 8 同时 数组元素 >= 64,链表变成红黑树)
    2.查询速度非常快,增删速度也不慢
    3.键要唯一:键所属的类覆盖重写hashCode和equals方法
    4.键无序:不保证存入和取出的数据是一致的
    5.键无索引:不能通过索引的方式获取元素
    6.允许存储null键和null7.线程不同步,不安全,但是效率高
    
java.util.Hashtable<K,V>集合特点		----不使用
    1.键具备哈希特性:哈希表 + 数组 + 单向链表
    2.查询速度非常快,增删速度也不慢
    3.见要唯一:键所属的类型覆盖重写hashCode和equals方法
    4.键无序:不保证存入和取出的顺序是一致的
    5.键无索引:不能通过索引的方式获取元素
    6.不允许存储null键和null7.线程同步,安全,但是效率低
    
java.util.LinkedHashMap<K,V>集合特点	----使用
    1.键具备哈希表和双向链表特性:
    	哈希表 数组 + 双向链表/红黑树(链表数量 > 8 同时 数组元素 <= 64,链表变成红黑树)
    2.查询速度非常快,增删速度也不慢
    3.哈希特性保证键要唯一:键所属的类覆盖重写hashCode和equals方法
    4.哈希特性保证键有序:保证存入和取出的顺序是一致的
    5.键无索引:不能通过索引的方式获取键
    6.允许存储null键和null7.线程不同步,不安全,但是效率高

3. Map集合的常用方法

Map接口中的常用方法
    public V put(K key,V value) : 把指定的键与指定的值添加到Map集合中。
    	如果键key,是第一次存储,返回null
    	如果键key已经存在,返回时被替换掉的值
    	键相同,值被替换,
    
    public V get(Object key) : 根据指定的键,在Map集合中获取对应的值。
    	键不存在:返回null
    public V remove(Object key) :
		把指定的键所对应的键值对元素,在Map集合中删除,返回被删除元素的值。
            
    public boolean containsKey(Object key) : 判断该集合中是否有此键
    public boolean containsValue(Object value) : 判断该集合中是否有此值
            
// 测试代码
public class Demo02Map {
   
    public static void main(String[] args) {
   
        // 多态的方式创建Map集合对象map,键的数据类型String,值的数据类型 String
        Map<String,String> map = new HashMap<>();

        // public V put(K key,V value) : 把指定的键与指定的值添加到Map集合中。
        System.out.println(map.put("文章","马伊琍")); // null
        System.out.println(map);

        System.out.println(map.put("文章","姚笛")); // 马伊琍

        map.put("黄晓明","杨颖");
        map.put("谢霆锋","王菲");
        System.out.println(map); // {文章=姚笛, 谢霆锋=王菲, 黄晓明=杨颖}

        // public V get(Object key) : 根据指定的键,在Map集合中获取对应的值。
        // 键不存在:返回null
        System.out.println(map.get("文章")); // 姚笛
        System.out.println(map.get("王宝强")); // 键不存在:返回null

        // public V remove(Object key) :
        // 把指定的键所对应的键值对元素,在Map集合中删除,返回被删除元素的值。
        System.out.println(map.remove("谢霆锋")); // 王菲
        System.out.println(map); // {文章=姚笛, 黄晓明=杨颖}

        // public boolean containsKey(Object key) : 判断该集合中是否有此键
        System.out.println("map集合中是否包含谢霆锋:" + map.containsKey("谢霆锋")); // false
        System.out.println("map集合中是否包含黄晓明:" + map.containsKey("黄晓明")); // true

        // public boolean containsValue(Object value) : 判断该集合中是否有此值
        System.out.println("map集合中是否包含姚笛:" + map.containsValue("姚笛")); // true
        System.out.println("map集合中是否包含马伊琍:" + map.containsValue("马伊琍")); // false

        // 判断集合是否为空
        System.out.println("键值对数量: "+map.size()); // 2
        System.out.println("判断集合是否为空:" + map.isEmpty()); // false


        // 清空集合
        map.clear();
        System.out.println(map);
        System.out.println("键值对数量: "+map.size()); // 0
        System.out.println("判断集合是否为空:" + map.isEmpty()); // true
    }
}

4. Map集合的获取所有的键和值的功能

Map接口中常用的方法
    public Set<K> keySet() : 获取Map集合中所有的键,存储到Set集合中。
    public Collection<V> values() : 返回Map集合中的所有值到Collection集合。
    
// 测试方法
public class Demo02MapMethod {
   
    public static void main(String[] args) {
   
        // 多态的方式创建Map集合对象map
        Map<String,Integer> map = new HashMap<>();

        //put: 添加键值对
        map.put("b",98);
        map.put("d",100);
        map.put("a",97);
        map.put("c",99);
        System.out.println(map);

        // public Set<K> keySet() : 获取Map集合中所有的键,存储到Set集合中。
        Set<String> set = map.keySet();
        // 增强for遍历
        for (String s : set) {
   
            System.out.println(s);
        }
        System.out.println("------------");
        // 更简便分方法
        for (String s : map.keySet()) {
   
            System.out.println(s);
        }
        System.out.println("------------");
        // public Collection<V> values() : 返回Map集合中的所有值到Collection集合。
        Collection<Integer> c = map.values();
        // 迭代器遍历
        Iterator<Integer> it = c.iterator();
        while (it.hasNext()) {
   
            System.out.println(it.next());
        }
    }
}

5. Map集合的遍历_通过键找值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xznKrFoc-1668257826898)(../黑马JavaSE就业班/day08(Map集合)]-403-含视频/05_笔记/img/1601287450226.png)

/*
	Map集合第一种遍历方式:根据键找值
		实现步骤:
		1.创建Map几个对象,指定键和值的类型
		2.Map集合对象调用put方法,添加键值对
		3.Map集合对象map调用keySet方法,获取所有的键对应的Set集合
		4.遍历(迭代器/增强for)所有的键对应的Set集合
			4.1获取到当前的键
			4.2Map集合对象调用get方法,传递当前的键,获取对应的值
			4.3打印键和值
*/

//代码实现
public class Demo03_01MapEach {
   
    public static void main(String[] args) {
   
        // 1.创建Map集合对象,指定键和值的类型
        Map<String,String> map = new HashMap<>();
        // 2.Map集合对象调用put方法,添加键值对
        map.put("邓超","孙俪");
        map.put("李晨","范冰冰");
        map.put("刘德华","柳岩");
        // 3.Map集合对象调用keySet方法,获取所有的键对应的Set集合
        Set<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值