Java基础进阶集合-map集合

简介: Java基础进阶集合-map集合

1、Map和Collection没有继承关系。


2、Map集合以key和value的方式存储数据:键值对


key和value都是引用数据类型。

key和value都是存储对象的内存地址。

key起到主导的地位,value是key的一个附属品。


3、Map接口中常用方法:


V put(K key, V value) 向Map集合中添加键值对

V get(Object key) 通过key获取value

void clear() 清空Map集合

boolean containsKey(Object key) 判断Map中是否包含某个key

boolean containsValue(Object value) 判断Map中是否包含某个value

boolean isEmpty() 判断Map集合中元素个数是否为0

V remove(Object key) 通过key删除键值对

int size() 获取Map集合中键值对的个数。

Collection values() 获取Map集合中所有的value,返回一个Collection

Set keySet() 获取Map集合所有的key(所有的键是一个set集合)

Set<Map.Entry<K,V>> entrySet()

将Map集合转换成Set集合

设现在有一个Map集合,如下所示:

map1集合对象

image.png


Set set = map1.entrySet();

set集合对象

1=zhangsan 【注意:Map集合通过entrySet()方法转换成的这个Set集合,Set集合中元素的类型是 Map.Entry<K,V>】

2=lisi 【Map.Entry和String一样,都是一种类型的名字,只不过:Map.Entry是静态内部类,是Map中的静态内部类】

3=wangwu

4=zhaoliu —> 这个东西是个什么?Map.Entry


示例代码01:


public class MapTest01 {
    public static void main(String[] args) {
        //创建Map集合对象
        Map<Integer,String> map = new HashMap<>();
        //往Map集合中添加键值对
        map.put(1,"张三");
        map.put(2,"李四");
        map.put(3,"王五");
        map.put(4,"赵六");
        //通过key获取value
        System.out.println(map.get(2));
        //获取键值对的数量
        System.out.println("键值对的数量:" + map.size());
        //通过key删除键值对
        map.remove(2);
        System.out.println("键值对的数量:" + map.size());
        //判断map中是否包含key
        // 判断是否包含某个key
        // contains方法底层调用的都是equals进行比对的,所以自定义的类型需要重写equals方法。
        System.out.println(map.containsKey(1));//true
        //判断map中是否包含value
        System.out.println(map.containsValue("王五"));//true
        //foreach遍历map集合的value
        Collection<String> values = map.values();
        for(String s : values){
            System.out.println(s);
        }
        //清空map集合
        map.clear();
        System.out.println("键值对的数量:" + map.size());
        //判断map集合是否为空
        System.out.println(map.isEmpty());
    }
}


运行结果:


0a2653c851af460fa595bd959398a8f1.png


map集合的遍历


1、通过itrator迭代器进行遍历


2、通过foreach循环遍历


3、通过map集合中的entrySet()方法进行遍历,调用此方法返回的是一个Set集合


示例代码02:


public class MapTest02 {
    public static void main(String[] args) {
        //创建map集合对象
        Map<Integer,String> map = new HashMap<>();
        //往集合中添加键值对
        map.put(1,"张三");
        map.put(2,"李四");
        map.put(3,"王五");
        map.put(4,"赵六");
        //获取集合的所有key
        // 遍历Map集合
        // 获取所有的key,所有的key是一个Set集合
        Set<Integer> keys = map.keySet();
        //第一种遍历集合方式
        /*Iterator<Integer> it = set.iterator();
        while(it.hasNext()){
            // 取出其中一个key
            Integer key = it.next();
            // 通过key获取value
            String value = map.get(key);
            System.out.println(key + "=" + value);
        }*/
        //第二种遍历集合方式
        for(Integer key : keys){
            System.out.println(key + "=" + map.get(key));
        }
        System.out.println("==================================");
        //第三种遍历方式
        Set<Map.Entry<Integer, String>> set = map.entrySet();
        Iterator<Map.Entry<Integer, String>> it = set.iterator();
        while(it.hasNext()){
            Map.Entry<Integer, String> node = it.next();
            Integer key = node.getKey();
            String value = node.getValue();
            System.out.println(key + "=" + value);
        }
        //第四种遍历方式
        // foreach
        // 这种方式效率比较高,因为获取key和value都是直接从node对象中获取的属性值。
        // 这种方式比较适合于大数据量。
        for(Map.Entry node : set){
            System.out.println(node.getKey() + "---->" + node.getValue());
        }
    }
}


运行结果:


2d65d23f6d4748949b924e4057485923.png


示例代码03:


//集合中的自定义泛型
public class MyClass {
    // 声明一个静态内部类
    public static class InnerClass{
        //静态方法
        public static void doSume(){
            System.out.println("静态内部类输出....");
        }
        //实例方法
        public void m(){
            System.out.println("静态内部类静态方法输出...");
        }
        public static void main(String[] args) {
            MyClass.InnerClass.doSume();
            //创建静态内部类对象
            MyClass.InnerClass i = new MyClass.InnerClass();
            i.m();
            // 给一个Set集合
            // 该Set集合中存储的对象是:MyClass.InnerClass类型
            Set<MyClass.InnerClass> s = new HashSet<>();
            // 这个Set集合中存储的是字符串对象。
            Set<String> s1 = new HashSet();
            Set<MyMap.Entry<Integer,String>> s2 = new HashSet();
        }
    }
}
class MyMap{
    public static class Entry<K,V>{
    }
}
相关文章
|
17小时前
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
20 1
|
18小时前
|
算法 安全 Java
【用Java学习数据结构系列】探索Java集合框架的无尽秘密pro
【用Java学习数据结构系列】探索Java集合框架的无尽秘密pro
10 1
|
10天前
|
存储 算法 安全
深入理解Java中的集合框架
【9月更文挑战第34天】本文将带你走进Java的集合框架,探索其背后的设计哲学和实现细节。我们将从集合的基本概念出发,逐步深入到具体的接口和类的实现,最后通过一个实际的例子来展示如何在Java程序中高效地使用集合。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深度理解。
14 1
|
18天前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
17天前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
22小时前
|
存储 Java
Java集合的分类
Java集合的分类
6 0
|
2天前
|
Java
Java 集合存在相同属性,其他元素累加
Java 集合存在相同属性,其他元素累加
12 0
|
6天前
|
存储 分布式计算 Java
Stream很好,Map很酷,但答应我别用toMap():Java开发中的高效集合操作
在Java的世界里,Stream API和Map集合无疑是两大强大的工具,它们极大地简化了数据处理和集合操作的复杂度。然而,在享受这些便利的同时,我们也应当警惕一些潜在的陷阱,尤其是当Stream与Map结合使用时。本文将深入探讨Stream与Map的优雅用法,并特别指出在使用toMap()方法时需要注意的问题,旨在帮助大家在工作中更高效、更安全地使用这些技术。
18 0
|
2月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
2月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。