Java集合框架-Collection03-Map集合

简介: Java集合框架-Collection03-Map集合

1. Map


1.1 特点:

无序、以键值对的形式添加元素,键不能重复,(如果多次往同一个索引存储元素,以最后一个存储为准,后面存储内容会将前面存储内容覆盖)值可以重复

          它没有继承Collection接口,map集合一次要存两个元素,第一个是Key(键-索引)、第二个内容是value(值)


用一个题目给大家说一下吧!

Map集合3层嵌套使用(2Map+1List)

//一.定义一个Map集合,key和value不规定类型,任意放入数据,用keySet()和entrySet()两种方式遍历出Map集合的数据
//二.定义一个Map集合,key和value不规定类型,任意放入数据,单独拿到所有的value的数据
//三.Map集合3层嵌套使用(2Map+1List)
  //List<Student> lst = new ArrayList<>();
  //Map<String, List<Student>> map = new TreeMap<>();
  Map<String, Map<String,List<Student>>> map1 = new HashMap<>();
  // 每一个部
  Map<String, List<Student>> m1 = new HashMap<>();// 初中部
  Map<String, List<Student>> m2 = new HashMap<>();// 高中部
  Map<String, List<Student>> m3 = new HashMap<>();// 大学部
  // 初中部
  List<Student> lst1 = new ArrayList<>();
  lst1.add(new Student("张晓东", 90f));
  lst1.add(new Student("张晓西", 75f));
  List<Student> lst2 = new ArrayList<>();
  lst2.add(new Student("张晓北", 80f));
  lst2.add(new Student("张晓南", 82f));
  m1.put("T110", lst1);
  m1.put("T272", lst2);
  map1.put("初中部", m1);
  // 高中部
  List<Student> lst3 = new ArrayList<>();
  lst3.add(new Student("张三", 90f));
  lst3.add(new Student("李四", 100f));
  List<Student> lst4 = new ArrayList<>();
  lst4.add(new Student("王五", 70f));
  lst4.add(new Student("小六", 100f));
  List<Student> lst5 = new ArrayList<>();
  lst5.add(new Student("小八 ", 70f));
  lst5.add(new Student("小九", 100f));
  m2.put("T206", lst3);
  m2.put("T222", lst4);
  m2.put("T272", lst5);
  map1.put("高中部", m2);
  // 大学部
  List<Student> lst6 = new ArrayList<>();
  lst6.add(new Student("可乐", 60f));
  lst6.add(new Student("雪碧", 50f));
  List<Student> lst7 = new ArrayList<>();
  lst7.add(new Student("哇哈哈", 90f));
  lst7.add(new Student("老干妈", 80f));
  m3.put("T230", lst6);
  m3.put("T231", lst7);
  map1.put("大学部", m3);
  Set<String> ks = map1.keySet();
  for (String str : ks) {
    Map<String, List<Student>> mp = map1.get(str);
    Set<Entry<String, List<Student>>> sy = mp.entrySet();
    for (Entry<String, List<Student>> sr : sy) {
    String key = sr.getKey();
    List<Student> val = sr.getValue();
    Iterator<Student> it5 = val.iterator();
    while (it5.hasNext()) {
      System.out.println(it5.next() + "," + key + "," + str);
    }
    }
  }

1.2 遍历(代码如下)

       1.2.1 先取出保存所有键的Set,再遍历Set即可(2种)

       1.2.2 先取出保存所有Entry的Set,再遍历此Set即可

package com.zking.Collection03.util;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Demo1 {
  public static void main(String[] args) {
  //1、Collection接口:集合框架的顶级接口,是List和Set的父接口,不是Map的父接口
  //Map特点:
  //1)无序
  //2)以键值对的形式存储数据,键唯一,值不唯一
  //3)没有继承Collection接口
  Map<String, Object> map = new HashMap<>();
  map.put("name", "zs");
  map.put("sex", "boy");
  map.put("age", "21");
  //问题:如何键相同,值如何处理
  map.put("name", "ww");
  map.put("score", 21);
  System.out.println(map);
  //2、遍历方式(三种)
  //1)获取所有的keys
  System.out.println("-------------1)获取所有的keys----------");
  Set<String> keys = map.keySet();
  for(String key : keys) {
    System.out.println(key);
  }
  //2)获取所有的values
  System.out.println("------------------2)获取所有的values-------------------");
  Collection<Object> values = map.values();
  for(Object object : values) {
    System.out.println(object);
  }
  //3)获取所有的键值对
  System.out.println("------------3)获取所有的键值对-------------");
  Set<Entry<String, Object>> entrySet = map.entrySet();
  for(Entry<String, Object> entry : entrySet) {
    System.out.println(entry.getKey()+"="+entry.getValue());
  }
  System.out.println("---------3)获取所有的键值对2-----------");
  entrySet.forEach(entry->{
    System.out.println(entry.getKey()+"="+entry.getValue());
  });
  }
}


2.HashMap与Hashtable之间的区别(重点)


2.1同步(synchronized)既排队  线程安全的     hashtable

    异步                                      线程非安全的   hashmap



2.2.Hashtable 默认的初始大小为 11,之后每次扩充,容量变为原来的 2n+1。HashMap 默认的初始化大小为 16。之后每次扩充,容量变为原来的 2 倍。


2.3.Hashtable的方法是同步的,而HashMap的方法不是。


2.4.只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。


3. 其它(地狱回调)


       3.1 Collections:工具类,提供一组静态方法操作Collection集合

       3.2 Arrays:工具类,提供了一组静态方法操作数组


package com.zking.Collection03.util;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
public class Demo2 {
  public static void main(String[] args) {
  //TreeMap
  //1)按照Key排序
  //1.1默认按照Key的升序排序
  //1.2通过Comparator.reverseOrder()方法实现key的降序排序
  Map<String,Object> map = new TreeMap<>(Comparator.reverseOrder());
  map.put("zs", 100);
  map.put("ls", 80);
  map.put("ww", 110);
  System.out.println(map);
  //2)按照Value排序
  //获取键值对
  Set<Entry<String, Object>> entrySet = map.entrySet();
  //将键值对转换成List集合
  List<Entry<String,Object>> lst = new ArrayList(entrySet);
  //使用Collections帮助类进行排序
  //面试题:Collection和Collections的区别?
  //Colection:集合框架顶级接口
  //Collection:集合框架帮助类
  Collections.sort(lst,new Comparator<Entry<String, Object>>() {
    @Override
    public int compare(Entry<String, Object> o1, Entry<String, Object> o2) {
    /*public int compare(Entry<String, Student> o1, Entry<String, Object> o2) {
    // TODO Auto-generated method stub
    Student s1 = o1.getValue();
    Student s2 = o2.getValue();
    s1.getSid()-s2.getSid();*/
    return o1.getValue().hashCode()-o2.getValue().hashCode();
    }
  });
  lst.forEach(System.out::println);
  //将数组转换成集合
  String str = "1,2,3,4,5,6";
  String[] split = str.split(",");
  List<String> asList = Arrays.asList(split);
  System.out.println(asList);
  String ss = Arrays.toString(split);
  System.out.println(ss);
  }
}


最后给大家分享一个题目,很简单,与上面的代码差不多,不一样的是我的值放的是对象


//四.定义一个Map集合,key和value不规定类型,针对集合中的元素进行排序
  Map<String,Student> mm = new TreeMap<>(Comparator.reverseOrder());
  mm.put("zs",new Student("zs",100f));
  mm.put("ls",new Student("ls",80f));
  mm.put("ww",new Student("ww",70f));
  mm.put("zl",new Student("zl",90f));
  System.out.println(mm);
相关文章
|
19天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
22天前
|
Java C# Swift
Java Stream中peek和map不为人知的秘密
本文通过一个Java Stream中的示例,探讨了`peek`方法在流式处理中的应用及其潜在问题。首先介绍了`peek`的基本定义与使用,并通过代码展示了其如何在流中对每个元素进行操作而不返回结果。接着讨论了`peek`作为中间操作的懒执行特性,强调了如果没有终端操作则不会执行的问题。文章指出,在某些情况下使用`peek`可能比`map`更简洁,但也需注意其懒执行带来的影响。
Java Stream中peek和map不为人知的秘密
|
9天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
527 8
|
7天前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
6天前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
8天前
|
算法 Java
Java项目不使用框架如何实现限流?
Java项目不使用框架如何实现限流?
19 2
|
8天前
|
存储 安全 Java
Java 常用集合分类
Java 常用集合分类
13 2
|
14天前
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
30 5
|
14天前
|
机器学习/深度学习 数据采集 JavaScript
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
ADR药品不良反应监测系统是一款智能化工具,用于监测和分析药品不良反应。该系统通过收集和分析病历、处方及实验室数据,快速识别潜在不良反应,提升用药安全性。系统采用Java开发,基于SpringBoot框架,前端使用Vue,具备数据采集、清洗、分析等功能模块,并能生成监测报告辅助医务人员决策。通过集成多种数据源并运用机器学习算法,系统可自动预警药品不良反应,有效减少药害事故,保障公众健康。
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
|
2月前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
31 5
下一篇
无影云桌面