JAVA基础_集合_Map&HashMap

1.Map集合

1.1 Map集合的概述

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

通俗的讲是键和值要一一对应,且键的‘值’不能相同,但值的‘值’能相同

1.2 Map集合的创建并添加对象

因为Map为一个接口,所以需要采用多态的方式去创建对象,这里采用HashMap如下:

Map(String String) map = new HashMap();
//put(K key,V value):添加元素。
		map.put("it001", "林青霞");
		map.put("it002", "张曼玉");
		map.put("it003", "王祖贤");

1.3 Map集合的成员方法

V put(K key,V value):添加元素
V remove(Object key):根据键删除键值对元素
void clear():移除所有的键值对元素
boolean containsKey(Object key):判断集合是否包含指定的键
boolean containsValue(Object value):判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
int size():返回集合中的键值对的对数

代码演示

import java.util.HashMap;
import java.util.Map;
public class MapDemo2 {
	public static void main(String[] args) {
		//创建集合对象
		Map<String,String> map = new HashMap<String,String>();
		
		//V put(K key,V value):添加元素
		//如果键是第一次存储,就直接存储元素,返回null
		//如果键不是第一次存储,就用值把以前的值替换,返回以前的值
		System.out.println("put:"+map.put("张无忌", "周芷若"));
		System.out.println("put:"+map.put("张无忌", "赵敏"));
		map.put("张无忌", "赵敏");
		map.put("郭靖", "黄蓉");
		map.put("杨过", "小龙女");
		
		//V remove(Object key):根据键删除键值对元素
	    System.out.println("remove:"+map.remove("郭靖")); 
	    System.out.println("remove:"+map.remove("郭襄"));
	
		
		//void clear():移除所有的键值对元素
		map.clear();
		
		//boolean containsKey(Object key):判断集合是否包含指定的键
	    System.out.println("containsKey:"+map.containsKey("郭靖"));
	    System.out.println("containsKey:"+map.containsKey("郭襄"));
		
		//boolean containsValue(Object value):判断集合是否包含指定的值 自己练习
		
		//boolean isEmpty():判断集合是否为空
		System.out.println("isEmpty:"+map.isEmpty());
		
		//int size():返回集合中的键值对的对数
		System.out.println("size:"+map.size());
		
		//输出集合对象
		System.out.println(map);
	}
}

1.4 Map集合的获取功能测试

V get(Object key):根据键获取值
Set keySet():获取所有键的集合
Collection values():获取所有值的集合

//V get(Object key):根据键获取值
		System.out.println("get:"+map.get("张无忌"));
		System.out.println("get:"+map.get("张三丰"));
		System.out.println("--------------------");
		
		//Set<K> keySet():获取所有键的集合
		Set<String> set = map.keySet();
		for(String key : set) {
			System.out.println(key);
		}
		System.out.println("--------------------");
		
		//Collection<V> values():获取所有值的集合
		Collection<String> values = map.values();
		for(String value : values) {
			System.out.println(value);
		}

1.5 Map集合的遍历

1.5.1 通过键值对找值

  1. 获取所有键的集合
  2. 遍历键的集合,获取到每一个键
  3. 根据键去找值

代码演示

public static void main(String[] args) {
        //1.创建map对象
        Map<String,String> map = new HashMap<>();
        //2.给对象添加值
        map.put("x01","张三");
        map.put("x02","李四");
        map.put("x03","王五");
        map.put("x04","王五");

        //3.通过键值对找值
        Set<String> stringSet = map.keySet();

        //4.遍历
        for (String s :stringSet
             ) {
            String s1 = map.get(s);
            System.out.println(s1);
        }
/*输出:
* 张三
* 王五
* 李四
* 王五
* 
* */
    }

1.5.2 通过键值对对象找键和值

  1. 获取所有键值对对象的集合
  2. 遍历键值对对象的集合,得到每一个键值对对象
  3. 根据键值对对象获取键和值

代码演示

//3. 通过键值对对象找键和值
        Set<Map.Entry<String, String>> entries = map.entrySet();

        //4.迭代法遍历
        Iterator<Map.Entry<String, String>> iterator = entries.iterator();
        while (iterator.hasNext()){
            Map.Entry<String, String> next = iterator.next();
            System.out.println(next.getKey()+"--------"+next.getValue());
        }
        
        //5.增强for遍历
        for (Map.Entry me :entries
             ) {
            System.out.println(me.getKey()+"----------"+me.getValue());
        }

1.5.3 两种遍历方式图解

在这里插入图片描述

2 HashMap集合的几个练习

2.1 HashMap集合的练习键是String值是Student

代码演示

public static void main(String[] args) {
        //1. 创建HashMap的对象
        HashMap<String,Student> hm = new HashMap<>();

        //2. 创建Student对象
        Student s1 = new Student(18,"张某");
        Student s2 = new Student(19,"李某");
        Student s3 = new Student(20,"王某");

        //3. 给hm对象添加元素
        hm.put("广州",s1);
        hm.put("深圳",s2);
        hm.put("北京",s3);

        //4. 遍历Map集合的元素
        Set<String> stringSet = hm.keySet();
        for (String s :stringSet
             ) {
            System.out.println("信息:"+hm.get(s).toString());
        }
        
        /*输出:
        * 信息:Student{age=18, name='张某'}
        * 信息:Student{age=19, name='李某'}
        * 信息:Student{age=20, name='王某'}
        * 
        * */
    }

2.2 HashMap集合的练习键是Student值是String

代码演示

public static void main(String[] args) {
        //1. 创建HashMap的对象
        HashMap<Student,String> hm = new HashMap<>();

        //2. 创建Student对象
        Student s1 = new Student(18,"张某");
        Student s2 = new Student(19,"李某");
        Student s3 = new Student(20,"王某");

        // 3.添加元素
        hm.put(s1,"广州");
        hm.put(s2,"杭州");
        hm.put(s3,"北京");

        // 4.遍历
        Set<Student> students = hm.keySet();
        for (Student st:students
             ) {
            System.out.println("地址:"+hm.get(st));
        }

/*
* 输出:
*    地址:北京
*    地址:杭州
*    地址:广州
* 
* */
    }

3 集合的嵌套练习

3.1 ArrayList嵌套HashMap

代码演示

public static void main(String[] args) {
        ArrayList<HashMap<String,String>> array = new ArrayList<HashMap<String,String>>();

        //创建元素1
        HashMap<String,String> hm1 = new HashMap<String,String>();
        hm1.put("孙策","大乔");
        hm1.put("周瑜","小乔");
        //把元素添加到array中
        array.add(hm1);

        //创建元素2
        HashMap<String,String> hm2 = new HashMap<String,String>();
        hm2.put("刘备","孙尚香");
        hm2.put("诸葛亮","黄月英");
        //把元素添加到array中
        array.add(hm2);

        //创建元素3
        HashMap<String,String> hm3 = new HashMap<String,String>();
        hm3.put("云中君","瑶");
        hm3.put("吕布","貂蝉");
        //把元素添加到array中
        array.add(hm3);

        //遍历ArrayList
        for (HashMap<String,String> hm : array
             ) {
            Set<String> stringSet = hm.keySet();
            for (String s:stringSet
                 ) {
                String s1 = hm.get(s);
                System.out.println(s1);
            }
        }

    }

3.1 HashMap嵌套ArrayList

代码演示

public static void main(String[] args) {
        //创建对象
        HashMap<String,ArrayList<String>> hm = new HashMap<>();

        //创建元素1
        ArrayList<String> sgyy = new ArrayList<String>();
        sgyy.add("诸葛亮");
        sgyy.add("赵云");
        //把元素添加到hm中
        hm.put("三国演义", sgyy);

        //创建元素2
        ArrayList<String> xyj = new ArrayList<String>();
        xyj.add("唐僧");
        xyj.add("孙悟空");
        //把元素添加到hm中
        hm.put("西游记", xyj);

        //创建元素3
        ArrayList<String> shz = new ArrayList<String>();
        shz.add("武松");
        shz.add("鲁智深");
        //把元素添加到hm中
        hm.put("水浒传", shz);


        //遍历
        Set<String> stringSet = hm.keySet();
        for (String s: stringSet
             ) {
            ArrayList<String> strings = hm.get(s);
            for (String ss : strings
                 ) {
                System.out.println(ss);
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值