当前位置: 首页 > news >正文

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

文章目录

  • 第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"))); // falseIterator<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); // 移除Pythonlist.set(0, "Kotlin");System.out.println(list.indexOf("Java")); // 0
System.out.println(list.lastIndexOf("Java")); // -1List<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)

相关文章:

  • 大模型Agent开发框架对比:LangGraph/LlamaIndex/DIY
  • 7-1.Android SQLite 之 SQLiteDatabase 简单编码模板(SQLiteDatabase 使用、SQL 语句编写)
  • 工业缺陷检测——Windows 10本地部署AnomalyGPT工业缺陷检测大模型
  • 综合题第二题(路由器的配置)
  • 高考技术——pandas使用
  • FastGPT大模型介绍
  • Python面向对象基础:类属性
  • Vscode把全部‘def‘都收起来的快捷键
  • Mybatis中 #{} 和 ${} 的区别是什么?
  • 【RabbitMQ】RabbitMq消息丢失、重复消费以及消费顺序性的解决方案
  • 媒界:助力民生保障 长城“消防炮”即将批量交付硬核守护万家灯火
  • 【hot100-java】【最长公共子序列】
  • 数据加密标准(DES)详解:原理、步骤及Python实现
  • Python连接Kafka收发数据等操作
  • MySQl查询分析工具 EXPLAIN ANALYZE
  • 收藏网友的 源程序下载网
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 2017年终总结、随想
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • canvas 五子棋游戏
  • CEF与代理
  • CSS相对定位
  • Docker 笔记(2):Dockerfile
  • ES6--对象的扩展
  • JavaScript创建对象的四种方式
  • Java深入 - 深入理解Java集合
  • Making An Indicator With Pure CSS
  • markdown编辑器简评
  • Vim Clutch | 面向脚踏板编程……
  • vue脚手架vue-cli
  • 电商搜索引擎的架构设计和性能优化
  • 跨域
  • 你真的知道 == 和 equals 的区别吗?
  • 少走弯路,给Java 1~5 年程序员的建议
  • 微信开放平台全网发布【失败】的几点排查方法
  • 为视图添加丝滑的水波纹
  • 线上 python http server profile 实践
  • 在weex里面使用chart图表
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​如何使用QGIS制作三维建筑
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • (10)ATF MMU转换表
  • (3) cmake编译多个cpp文件
  • (C语言)fgets与fputs函数详解
  • (day 12)JavaScript学习笔记(数组3)
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (四)汇编语言——简单程序
  • (算法)前K大的和
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一) 初入MySQL 【认识和部署】
  • (一)为什么要选择C++