Java集合框架与Lambda表达式实践指南(小白速看)

news2024/9/28 9:32:29

文章目录

  • 第7章 集合
    • 1. 集合概述
      • 1.1 什么是集合
      • 1.2 集合的核心继承体系
    • 2. Collection接口
      • 2.1 Collection接口概述
      • 2.2 Collection接口常用方法
    • 3. List接口
      • 3.1 List接口的特点
      • 3.2 List接口常用方法
    • 4. ArrayList和LinkedList
      • 4.1 ArrayList
      • 4.2 LinkedList
    • 5. Set接口
      • 5.1 Set接口概述
      • 5.2 HashSet
      • 5.3 LinkedHashSet
      • 5.4 TreeSet
    • 6. Map接口
      • 6.1 Map接口概述
      • 6.2 HashMap
      • 6.3 LinkedHashMap
      • 6.4 TreeMap
      • 6.5 Properties
    • 7. Collections和Arrays工具类
      • 7.1 Collections工具类
      • 7.2 Arrays工具类
    • 8. Lambda表达式
      • 8.1 Lambda表达式概述
      • 8.2 Lambda表达式示例
    • 9. 上机练习
      • 9.1 ArrayList和HashSet练习
    • 代码示例:统计字符串中各个字符的数量
      • 使用说明:
      • 预期输出示例:


第7章 集合

1. 集合概述

1.1 什么是集合

集合是为了存储不同类型的多个对象,Java提供了一系列特殊的类,这些类可以存储任意类型的对象,并且存储的长度可变,被统称为集合。集合可以简单理解为一个长度可变,可以存储不同数据类型的动态数组。

1.2 集合的核心继承体系

Java集合体系主要包含以下几个核心接口:

  • Collection:最基本的集合接口,用于存储一组无序、不唯一的对象。
  • List:继承自Collection接口,用于存储一组有序、不唯一的对象。
  • Set:继承自Collection接口,用于存储一组无序、唯一的对象。
  • Map:与Collection接口不同,用于存储一组键值对象。

2. Collection接口

2.1 Collection接口概述

Collection接口是Java单列集合中的根接口,定义了各种具体单列集合的共性。

2.2 Collection接口常用方法

Collection<String> collection = new ArrayList<>();
collection.add("Java");
collection.add("Python");
collection.addAll(Arrays.asList("C++", "JavaScript"));

collection.remove("Python");
collection.removeAll(Arrays.asList("C++", "JavaScript"));

System.out.println(collection.isEmpty()); // false
System.out.println(collection.contains("Java")); // true
System.out.println(collection.containsAll(Arrays.asList("Java", "JavaScript"))); // false

Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}
System.out.println(collection.size()); // 1

输出结果:

false
true
false
Java
1

3. List接口

3.1 List接口的特点

List接口继承自Collection接口,可以存储重复的元素,所有元素以线性方式进行存储,可以通过索引访问。

3.2 List接口常用方法

List<String> list = new ArrayList<>();
list.add("Java");
list.add(1, "Python");
list.addAll(1, Arrays.asList("C++", "JavaScript"));

String element = list.get(1); // Python
list.remove(1); // 移除Python

list.set(0, "Kotlin");

System.out.println(list.indexOf("Java")); // 0
System.out.println(list.lastIndexOf("Java")); // -1

List<String> subList = list.subList(1, 3);
System.out.println(subList); // [C++, JavaScript]

输出结果:

Python
0
-1
[C++, JavaScript]

4. ArrayList和LinkedList

4.1 ArrayList

ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("Java");
arrayList.add("Python");
arrayList.add("Java");

System.out.println(arrayList); // [Java, Python, Java]

输出结果:

[Java, Python, Java]

4.2 LinkedList

LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("Java");
linkedList.addFirst("Python");
linkedList.addLast("JavaScript");

System.out.println(linkedList); // [Python, Java, JavaScript]
System.out.println(linkedList.getFirst()); // Python
System.out.println(linkedList.getLast()); // JavaScript

输出结果:

[Python, Java, JavaScript]
Python
JavaScript

5. Set接口

5.1 Set接口概述

Set接口继承自Collection接口,保证元素唯一性。

5.2 HashSet

HashSet<String> hashSet = new HashSet<>();
hashSet.add("Java");
hashSet.add("Python");
hashSet.add("Java"); // 重复元素,不会被添加

System.out.println(hashSet); // [Java, Python]

输出结果:

[Java, Python]

5.3 LinkedHashSet

LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("Java");
linkedHashSet.add("Python");
linkedHashSet.add("JavaScript");

System.out.println(linkedHashSet); // [Java, Python, JavaScript]

输出结果:

[Java, Python, JavaScript]

5.4 TreeSet

TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("Java");
treeSet.add("Python");
treeSet.add("JavaScript");

System.out.println(treeSet); // [Java, JavaScript, Python]

输出结果:

[Java, JavaScript, Python]

6. Map接口

6.1 Map接口概述

Map接口是一种双列集合,存储键值对。

6.2 HashMap

HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("Java", "Island");
hashMap.put("Python", "Cobra");
hashMap.put("Java", "SE"); // 替换已有键的值

System.out.println(hashMap); // {Java=SE, Python=Cobra}

输出结果:

{Java=SE, Python=Cobra}

6.3 LinkedHashMap

LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("Java", "Island");
linkedHashMap.put("Python", "Cobra");
linkedHashMap.put("JavaScript", "Spider");

System.out.println(linkedHashMap); // {Java=Island, Python=Cobra, JavaScript=Spider}

输出结果:

{Java=Island, Python=Cobra, JavaScript=Spider}

6.4 TreeMap

TreeMap<String, String> treeMap = new TreeMap<>();
treeMap.put("Java", "Island");
treeMap.put("Python", "Cobra");
treeMap.put("JavaScript", "Spider");

System.out.println(treeMap); // {Java=Island, JavaScript=Spider, Python=Cobra}

输出结果:

{Java=Island, JavaScript=Spider, Python=Cobra}

6.5 Properties

Properties properties = new Properties();
properties.setProperty("name", "Kimi");
properties.setProperty("version", "1.0");

System.out.println(properties.getProperty("name")); // Kimi
System.out.println(properties.getProperty("version")); // 1.0

输出结果:

Kimi
1.0

7. Collections和Arrays工具类

7.1 Collections工具类

List<String> list = new ArrayList<>(Arrays.asList("Java", "Python", "JavaScript", "C++"));
Collections.reverse(list);

System.out.println(list); // [C++, JavaScript, Python, Java]

输出结果:

[C++, JavaScript, Python, Java]

7.2 Arrays工具类

int[] array = {1, 2, 3, 4, 5};
Arrays.sort(array);

System.out.println(Arrays.toString(array)); // [1, 2, 3, 4, 5]

输出结果:

[1, 2, 3, 4, 5]

8. Lambda表达式

8.1 Lambda表达式概述

Lambda表达式用于简化代码,取代匿名内部类。

8.2 Lambda表达式示例

List<String> list = new ArrayList<>(Arrays.asList("Java", "Python", "JavaScript", "C++"));
list.forEach(e -> System.out.println(e));

输出结果:

Java
Python
JavaScript
C++

9. 上机练习

9.1 ArrayList和HashSet练习

  • 统计字符串中各个字符的数量
    题目:利用键盘录入,输入一个字符串,统计该字符串中各个字符的数量
    如用户输入字符串:“hello world java”,程序输出结果:h(1)e(1)l(3)o(2) (2)w(1)r(1)d(1)j(1)a(2)v(1)。
    (1)创建键盘输入对象
    (2)使用nextLine从键盘中读取一行内容
    (3)将字符串转换成字符数组
    (4)创建map集合,用来存放字符:key是字符 value是字符出现的个数
    (5)遍历字符数组
    (6)拿到每个字符,去map中查看是否有保存对应的次数
    (7)如果这个字符没有保存次数,就设置为1次
    (8)如果这个字符有保存次数,就设置为原来的次数+1次
    (9)按题目要求拼接字符串
    (10)输出结果

代码示例:统计字符串中各个字符的数量

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class CharacterCount {
    public static void main(String[] args) {
        // (1)创建键盘输入对象
        Scanner scanner = new Scanner(System.in);

        // (2)使用nextLine从键盘中读取一行内容
        System.out.println("Please enter a string:");
        String input = scanner.nextLine();

        // (3)将字符串转换成字符数组
        char[] characters = input.toCharArray();

        // (4)创建map集合,用来存放字符:key是字符,value是字符出现的个数
        Map<Character, Integer> charCountMap = new HashMap<>();

        // (5)遍历字符数组
        for (char c : characters) {
            // (6)拿到每个字符,去map中查看是否有保存对应的次数
            // (7)如果这个字符没有保存次数,就设置为1次
            // (8)如果这个字符有保存次数,就设置为原来的次数+1次
            charCountMap.put(c, charCountMap.getOrDefault(c, 0) + 1);
        }

        // (9)按题目要求拼接字符串
        for (Map.Entry<Character, Integer> entry : charCountMap.entrySet()) {
            System.out.println(entry.getKey() + "(" + entry.getValue() + ")");
        }

        // (10)输出结果
        // 结果将显示类似: h(1)e(1)l(3)o(2)w(1)r(1)d(1)j(1)a(2)v(1)
    }
}

使用说明:

  1. 运行程序。
  2. 根据提示输入字符串,例如:“hello world java”。
  3. 观察输出结果,程序将统计并显示每个字符及其出现的次数。

预期输出示例:

Please enter a string:
h(1)e(1)l(3)o(2)w(1)r(1)d(1)j(1)a(2)v(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2173072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

气膜健身馆:提升运动体验与健康的理想选择—轻空间

近年来&#xff0c;气膜健身馆作为一种新兴的运动场所&#xff0c;正逐渐受到越来越多健身爱好者的青睐。这种独特的建筑形式不仅提供了良好的运动环境&#xff0c;更在健康和运动表现上展现出诸多优势。 优越的空气质量 气膜结构的核心技术通过内外气压差形成稳定的气膜&#…

Mysql调优之索引优化(四)

一、mysql索引结构B树原理 B树开始就是n树&#xff0c;不是二叉树 B树的非叶子结点存储了数据&#xff0c;导致层级会很深&#xff0c;每一层又有数据又有索引。 B树只有叶子结点存储数据&#xff0c;其余都是存储索引&#xff0c;增加了每层存取索引的数量&#xff08;3层结构…

Linux开源网络:高性能数据平面

数据平面的性能在很大程度上取决于网络 I/O 的性能&#xff0c;而网络数据包从网卡到用户空间的应用程序需要经历多个阶段&#xff0c;本文从数据平面基础到NFV&#xff0c;NFC基础设施再到OVS-DPDK VPP进行概论上的描述。 部分内容来源于《Linux开源网络全栈详解&#xff1a;从…

助力商用车远程检测维修,贝锐向日葵携手上海星融打造标杆案例

商用车是一个成熟且复杂的领域&#xff0c;伴随着数字化与信息化的不断发展&#xff0c;商用车领域的上下游厂商也正在积极的拥抱数字化&#xff0c;应用信息化工具所带来的“红利”&#xff0c;来提供更高质量的产品与服务&#xff0c;其中比较典型的代表&#xff0c;就是在商…

②EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器

EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器https://item.taobao.com/item.htm?ftt&id798036415719 EtherCAT 串口网关 EtherCAT 转 RS485 &#xff08;接上一章&#xff09; 自由协议通信步骤 &#xff08;以MS-A2-1041为例&#xff09; 接收与…

OSM转出shp的数据为啥有那么多空属性

当打开我们提供的OSM转出SHP格式的电力或其它类型数据可能会看到很多空属性&#xff0c;这个原因其实如果是写程序的人会很容易理解&#xff0c;但一般人可能理解起来比较困难。我试着解释一下&#xff0c;能理解就理解。不能理解您就记住这是格式转换产生的冗余数据就行&#…

【保姆级教程】批量下载Pexels视频Python脚本(以HumanVid数据集为例)

目录 方案一&#xff1a;转换链接为download模式 方案二&#xff1a;获取源链接后下载 附录&#xff1a;HumanVid链接 方案一&#xff1a;转换链接为download模式 将下载链接的后缀加入 /download 然后用下面的脚本下载&#xff1a; import argparse import json import o…

react 状态管理

Redux Redux是React中常用的状态管理组件&#xff0c;类似于Vue中的Pinia(Vuex)&#xff0c;可以独立于框架运行 作用&#xff1a; 通过集中管理的方式管理应用的状态 配套工具 在react中使用redux&#xff0c;官方要求按照两个插件&#xff0c;Redux Toolkit 和 react-red…

【补充】倒易点阵基本性质

&#xff08;1&#xff09;任意倒易矢量 r h k l ∗ h a ∗ k b ∗ l c ∗ \mathbf{r}_{hkl}^* h\mathbf{a^*} k\mathbf{b^*} l\mathbf{c^*} rhkl∗​ha∗kb∗lc∗必然垂直于正空间中的(hkl)晶面。 正空间中的(hkl)晶面的法向是[hkl]&#xff0c;和坐标轴的交点为A、B、…

基于yolov8的辣椒缺陷检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

阅读本文请注意该系统设计是针对单个辣椒进行缺陷检测&#xff0c;具体可以在训练数据集查看数据集具体情况 【算法介绍】 基于YOLOv8的辣椒缺陷检测系统是一种利用深度学习技术&#xff0c;特别是YOLOv8算法&#xff0c;来自动识别和检测辣椒表面缺陷的先进系统。YOLOv8作为…

Serilog文档翻译系列(六) - 可用的接收器、增强器、格式化输出

01、提供的接收器 Serilog 使用接收器将日志事件以各种格式写入存储。许多接收器由更广泛的 Serilog 社区开发和支持&#xff1b;可以通过在 NuGet 上搜索 serilog 标签找到。 02、增强器 日志事件可以通过多种方式增强属性。通过 NuGet 提供了一些预构建的增强器&#xff…

openEuler 20.03,22.03 一键部署Oracle21c zip

oracle21c前言 Oracle开发的关系数据库产品因性能卓越而闻名,Oracle数据库产品为财富排行榜上的前1000家公司所采用,许多大型网站也选用了Oracle系统,是世界最好的数据库产品。此外,Oracle公司还开发其他应用程序和软件。同时,Oracle在英语里还是“神谕”的意思,意为“替…

十进制与ip地址转换公式

1、十进制转为ip地址公式 TEXT(INT(C2/16777216),“0”)&“.”&TEXT(INT((C2-INT(C2/16777216)*16777216)/65536),“0”)&“.”&TEXT(INT((C2-INT(C2/16777216)*16777216-INT((C2-INT(C2/16777216)*16777216)/65536)*65536)/256),“0”)&“.”&TEXT(MO…

SpringBoot的概述与搭建

目录 一.SpringBoot的概述 二.SpringBoot 特点 三.SpringBoot 的核心功能 3.1起步依赖 3.2自动配置 四.SpringBoot 开发环境构建 五.SpringBoot 配置文件 六.SpringBoot数据访问管理 七.springboot注解 八.springboot集成mybatis 九.springboot全局异常捕获与处理 一…

数据集-目标检测系列-豹子 猎豹 检测数据集 leopard>> DataBall

数据集-目标检测系列-豹子 猎豹 检测数据集 leopard>> DataBall 数据集-目标检测系列-豹子 猎豹 检测数据集 leopard 数据量&#xff1a;5k 想要进一步了解&#xff0c;请联系。 DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#x…

C#测试调用FreeSpire.PDFViewer浏览PDF文件

Free Spire.PDFViewer是商业版Spire.PDFViewer的社区版本&#xff0c;支持以控件形式打开并查看PDf文件&#xff0c;但由于是免费版本&#xff0c;存在使用限制&#xff0c;打开的PDF文档只显示前10页内容。如果日常操作的pdf文件都不超过10页&#xff0c;可以考虑使用Free Spi…

我是如何将 Java 基础 docker 镜像大小从 674Mb 优化到 58Mb的

我是如何将 Java 基础 docker 镜像大小从 674Mb 优化到 58Mb的 如果您是 Java 开发人员&#xff0c;并且正在使用 Docker 打包应用程序&#xff0c;您可能已经注意到&#xff0c;即使是“hello world”类型的项目&#xff0c;最终镜像的大小也可能非常大。在本文中&#xff0c…

DAY16||513.找树左下角的值 |路径总和|从中序与后序遍历序列构造二叉树

513.找树左下角的值 题目&#xff1a;513. 找树左下角的值 - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: […

InternVL 微调实践

任务 follow 教学文档和视频使用QLoRA进行微调模型&#xff0c;复现微调效果&#xff0c;并能成功讲出梗图. 复现过程 参考教程部署&#xff1a;https://github.com/InternLM/Tutorial/blob/camp3/docs/L2/InternVL/joke_readme.md 训练 合并权重&&模型转换 pyth…

多旋翼无人机“仿鸟类”精确拦截飞行目标,助力低空安全

摘要&#xff1a; 使用低成本携带捷联式相机的无人机拦截低空入侵目标是一种具有竞争力的选择。然而&#xff0c;非合作目标的恶意机动和摄像头的耦合使得这项任务充满挑战。为了解决这个问题&#xff0c;提出了一种基于比例导引且具有视场保持能力的基于图像的视觉伺服&#x…