Java学习第十七天--Map

作用:存储一组数据类型相同的数

特点:

存储的方式是以键值对的形式存储格式为:

        键:key

        值:value

Map
        HashMap
                K的数据结构:红黑树(二叉树)+哈希表
                特点:
                        线程不安全的
                        JDK1.2
                        允许null作为键或值
        HashTable
                K的数据结构:红黑树(二叉树)+哈希表
                特点:
                        线程安全的
                        JDK1.0
                        不允许null作为键或值
        TreeMap
                K的数据结构:红黑树(二叉树)+自定义比较
        注意:
                key对应的数据类型要么拥有比较性,要么在创建TreeMap时指定比较器
        Properties
                注意:后期在配置文件读写中使用,其本质就是一个Map,所以拿到该对象后,Map对象如何操作他就如何操作
                注意:
                        key不能重复
                        如果Map中已经存在该key,那么本次存储的值将会替换原有的值

Map不能自己创建对象,须由它的子类 HashTable TreeTable HashMap来创建

Map中的方法(所有子类公用,子类无特殊方法):

增:
        V put(K k,V v):添加一个键值对
        注意:
                如果本次添加的键值对中键不在当前map中存在,返回值为null
                如果本次添加的键值对中键在当前map中存在,返回值为key原来对应的Value
                如果本次添加的键值对中键在当前map中存在,会替换原有的值
        void putAll(Map<? extends K, ? extends V> m):添加多个键值对

删:
        V remove(Object key):根据key删除对应的键值对象
        注意:
                1,返回值为被删除键值对中的值
                2,如果删除的key在map中不存在,则删除失败,返回值为null
        boolean remove(Object key, Object value):根据key与value删除对应的键值
        注意:
                1,要求key与value必须同时与map中的某一个键值对象相同,才可以删除
                2,返回值为是否删除成功
        void clear():清空

改:
        V put(K k,V v):修改一个键值对
        注意:key在map存在就是修改,不存在就是添加

查:
        int size();查询map中键值对的个数(map的长度)
        boolean containsKey(Object key):判断当前map是否存在该key
        boolean containsValue(Object value):判断当前map是否存在该value
        Set<Map.Entry<K, V>> entrySet():获取当前map中所有键值对的集合
                Entry:键值对
        getKey():获取该键值的key
        getVlue():获取该键值的Value
        V get(Object key):通过key获取对应的value
        V getOrDefault(Object key, V defaultValue):通过key获取对应的value
                key:键
                defaultValue:默认值
                注意:如果键不存在,那么返回值为默认值,如果键存在,返回值键对应的值
        boolean isEmpty():判断当前map是否为空
        Set<K> keySet():获取字典中所有key的集合
        Collection<V> values():获取字典中所有值的集合
                注意:不能使用foreach直接遍历map

练习:

/*
 * 使用Map完成王者荣耀助手的案例
 * 选择分路--选择英雄--推荐装备
 */
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

import javax.swing.Box;

public class Demo01 {
	public static void main(String[] args) {
		ArrayList<String> zhuangBei01 = new ArrayList<String>();
		ArrayList<String> zhuangBei02 = new ArrayList<String>();
		ArrayList<String> zhuangBei03 = new ArrayList<String>();
		ArrayList<String> zhuangBei04 = new ArrayList<String>();
		
		Map<String, ArrayList<String>> yingXiong01 = new HashMap();
		Map<String, ArrayList<String>> yingXiong02 = new HashMap();
		Map<String, ArrayList<String>> yingXiong03 = new HashMap();
		Map<String, ArrayList<String>> yingXiong04 = new HashMap();
		
		Map<String, Map<String, ArrayList<String>>> box = new HashMap<String, Map<String, ArrayList<String>>>();
		//HashMap<String, Map<String, Map<String, ArrayList<String>>>> box = new HashMap<String, Map<String, Map<String, ArrayList<String>>>>();
		Collections.addAll(zhuangBei01, "攻速鞋","电刀","无尽","破晓","破军","吸血");
		Collections.addAll(zhuangBei02, "抵抗鞋","奔狼","极寒风暴","痛苦面具","魔女斗篷","霸者重装");
		Collections.addAll(zhuangBei03, "攻速鞋","无尽","吸血刀","蝶刃","破晓","电刀");
		Collections.addAll(zhuangBei04, "抵抗鞋","吸血书","回响之杖","帽子","法穿棒","金身");
		//Collections.addAll(yingXiong, "鲁班七号","鲁班大师","伽罗","不知火舞","娜可露露");
		yingXiong01.put("鲁班七号", zhuangBei01);
		yingXiong02.put("鲁班大师", zhuangBei02);
		yingXiong01.put("伽罗", zhuangBei03);
		yingXiong04.put("不知火舞", zhuangBei04);
		
		box.put("上路", yingXiong03);
		box.put("中路", yingXiong04);
		box.put("下路", yingXiong01);
		box.put("辅助", yingXiong02);
		
		System.out.println("欢迎来到王者荣耀助手");
		System.out.println("请选择你的分路");
		Set<String> fenLu = box.keySet();
		for (String lu : fenLu) {
			System.out.println(lu);
		}
		System.out.println("请输入你要选择的分路");
		Scanner scanner = new Scanner(System.in);
		String lu = scanner.next();
		if (box.containsKey(lu)) {
			Map<String, ArrayList<String>> yingXiong = box.get(lu);
			Set<String> hero = yingXiong.keySet();
			for (String string : hero) {
				System.out.println(string);
			}
			System.out.println("请选择你选的英雄");
			String yx = scanner.next();
			if (yingXiong.containsKey(yx)) {
				System.out.println("选择成功,你选择"+yx);
				ArrayList<String> zhuangBei = yingXiong.get(yx);
				System.out.println("推荐的装备是:"+zhuangBei);
			}else {
				System.out.println("所选英雄不存在");
			}
		}else {
			System.out.println("输入错误");
		}
		
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值