《Java 简易速速上手小册》第3章:Java 数据结构(2024 最新版)

在这里插入图片描述

文章目录

  • 3.1 数组和字符串 - 数据的基本营地
    • 3.1.1 基础知识
    • 3.1.2 重点案例:统计文本中的单词频率
    • 3.1.3 拓展案例 1:寻找数组中的最大元素
    • 3.1.4 拓展案例 2:反转字符串
  • 3.2 集合框架概述 - 数据小队的训练场
    • 3.2.1 基础知识
    • 3.2.2 重点案例:学生信息管理系统
    • 3.2.3 拓展案例 1:任务调度器
    • 3.2.4 拓展案例 2:产品库存管理
  • 3.3 泛型和迭代器 - 数据小队的特种兵
    • 3.3.1 基础知识
    • 3.3.2 重点案例:通用数据容器
    • 3.3.3 拓展案例 1:键值对存储
    • 3.3.4 拓展案例 2:类型安全的交换函数

3.1 数组和字符串 - 数据的基本营地

在 Java 的世界中,数组和字符串是处理数据的基础。它们像是你的数据小队的营地,为你的编程之旅提供了起点。让我们更深入地了解这些基础结构,并通过一些实用的案例来探索它们的力量。

3.1.1 基础知识

  • 数组:数组是相同类型数据的有序集合。在 Java 中,数组的大小在声明时确定,并且不能更改。你可以通过索引(从 0 开始)访问数组中的每个元素。
int[] numbers = new int[5]; // 声明一个整型数组,包含 5 个元素
numbers[0] = 1; // 给数组的第一个元素赋值
  • 字符串:字符串是字符的序列,Java 中的 String 类提供了丰富的方法来操作这些字符序列。字符串在 Java 中是不可变的,这意味着一旦创建,你就不能改变它们。
String greeting = "Hello, World!"; // 创建一个字符串

3.1.2 重点案例:统计文本中的单词频率

假设我们要分析一段文本,统计其中每个单词出现的频率。这个任务可以通过数组和字符串操作来完成。

import java.util.HashMap;
import java.util.Map;public class WordFrequency {public static void main(String[] args) {String text = "Hello world. Hello Java. Hello Java World.";text = text.toLowerCase().replaceAll("[^a-z ]", ""); // 转小写并移除标点符号String[] words = text.split(" "); // 使用空格分割字符串成单词数组Map<String, Integer> frequencyMap = new HashMap<>();for (String word : words) {frequencyMap.put(word, frequencyMap.getOrDefault(word, 0) + 1);}frequencyMap.forEach((key, value) -> System.out.println(key + ": " + value));}
}

3.1.3 拓展案例 1:寻找数组中的最大元素

在一组数据中寻找最大元素是一个常见的任务,可以通过遍历数组来实现。

public class FindMax {public static void main(String[] args) {int[] numbers = {5, 3, 8, 2, 9, 1};int max = numbers[0]; // 假设第一个元素是最大的for (int number : numbers) {if (number > max) {max = number; // 找到更大的元素}}System.out.println("The maximum number is: " + max);}
}

3.1.4 拓展案例 2:反转字符串

字符串的反转是许多算法和面试题中的常见问题。在 Java 中,我们可以使用 StringBuilder 类来实现这个功能,因为 String 是不可变的。

public class ReverseString {public static void main(String[] args) {String original = "Hello, World!";String reversed = new StringBuilder(original).reverse().toString();System.out.println("Original: " + original);System.out.println("Reversed: " + reversed);}
}

通过这些案例,我们可以看到数组和字符串如何作为处理数据的基本工具,在 Java 编程中发挥着重要的作用。从统计单词频率到寻找最大元素,再到反转字符串,掌握这些基础技能将为你解决更复杂的问题打下坚实的基础。继续前进,实践这些案例,你将会发现更多有趣和实用的数据处理技巧!

在这里插入图片描述


3.2 集合框架概述 - 数据小队的训练场

Java 集合框架(JCF)是一套性能优异的类和接口,它提供了一种高效地存储和处理数据集合的方式。想象你正在指挥你的数据小队在训练场上进行训练,集合框架就是你的训练手册,告诉你如何组织和操作这些数据。

3.2.1 基础知识

  • List:List 接口允许我们存储一个有序的集合,可以包含重复的元素。它是一个动态数组,可以增长和缩小。ArrayList 和 LinkedList 是两个实现了 List 接口的常用类。

  • Set:Set 接口提供了存储唯一元素的方式,即不允许重复的元素。HashSet 和 TreeSet 是两个常用的实现了 Set 接口的类。

  • Map:Map 接口使用键值对的方式存储数据。每个键映射到一个值。键不能重复,但值可以。HashMap 和 TreeMap 是两个实现了 Map 接口的常用类。

3.2.2 重点案例:学生信息管理系统

在一个学生信息管理系统中,我们需要存储和管理每个学生的信息,包括姓名、学号和成绩。我们可以使用 Map 来实现这个系统,其中学号作为唯一的键,学生信息作为值。

import java.util.HashMap;
import java.util.Map;class Student {String name;double grade;public Student(String name, double grade) {this.name = name;this.grade = grade;}@Overridepublic String toString() {return "Student{name='" + name + '\'' + ", grade=" + grade + '}';}
}public class StudentManagement {public static void main(String[] args) {Map<String, Student> students = new HashMap<>();students.put("S001", new Student("Alice", 89.5));students.put("S002", new Student("Bob", 92.0));students.put("S003", new Student("Charlie", 85.5));students.forEach((id, student) -> System.out.println(id + ": " + student));}
}

3.2.3 拓展案例 1:任务调度器

在一个任务调度器中,我们需要管理和调度一系列的任务。我们可以使用 PriorityQueue 来实现这个系统,优先调度重要性高的任务。

import java.util.PriorityQueue;class Task implements Comparable<Task> {String name;int priority;public Task(String name, int priority) {this.name = name;this.priority = priority;}@Overridepublic int compareTo(Task other) {return Integer.compare(other.priority, this.priority); // 高优先级先出队}@Overridepublic String toString() {return "Task{name='" + name + '\'' + ", priority=" + priority + '}';}
}public class TaskScheduler {public static void main(String[] args) {PriorityQueue<Task> tasks = new PriorityQueue<>();tasks.offer(new Task("Fix bug", 5));tasks.offer(new Task("Write documentation", 1));tasks.offer(new Task("Implement feature", 10));while (!tasks.isEmpty()) {System.out.println("Processing " + tasks.poll());}}
}

3.2.4 拓展案例 2:产品库存管理

在一个电商平台的库存管理系统中,我们需要跟踪每个产品的库存数量。我们可以使用 Map 来存储产品 ID 和对应的库存数量。

import java.util.HashMap;
import java.util.Map;public class InventoryManagement {public static void main(String[] args) {Map<String, Integer> inventory = new HashMap<>();inventory.put("P001", 100); // 产品 ID 为 P001 的产品有 100 件库存inventory.put("P002", 200);inventory.put("P003", 150);// 增加库存inventory.put("P001", inventory.get("P001") + 50);inventory.forEach((productId, quantity) ->System.out.println("Product ID: " + productId + ", Quantity: " + quantity));}
}

通过这些案例,我们可以看到 Java 集合框架在实际生产中的强大用途。从管理学生信息到任务调度,再到库存管理,JCF 提供了一套灵活且强大的工具,帮助你高效地组织和操作数据集合。掌握这些集合类和接口将大大提高你的 Java 编程效率。

在这里插入图片描述


3.3 泛型和迭代器 - 数据小队的特种兵

在 Java 的数据管理军团中,泛型和迭代器是那些特别训练过的特种兵,它们提供了额外的灵活性和力量,使得数据操作更加高效和安全。

3.3.1 基础知识

  • 泛型(Generics):泛型提供了代码的类型安全性,允许在编译时检查类型错误。它们使得你可以编写可以应用于多种类型的通用代码,而不是为每种需要操作的数据类型编写重复的代码。
List<String> strings = new ArrayList<>(); // 使用泛型创建字符串列表
strings.add("Java");
// strings.add(123); // 编译时错误,保证了类型安全
  • 迭代器(Iterator):迭代器提供了一种遍历集合中元素的标准方式,无需关心集合的内部结构。它支持 hasNext()next() 操作,用于检查集合中是否还有元素,以及访问下一个元素。
Iterator<String> iterator = strings.iterator();
while(iterator.hasNext()) {String str = iterator.next();System.out.println(str);
}

3.3.2 重点案例:通用数据容器

假设我们需要创建一个通用的数据容器,它可以存储任何类型的数据,并提供遍历这些数据的能力。我们可以使用泛型来定义这个容器,以及迭代器来遍历容器中的数据。

class DataContainer<T> implements Iterable<T> {private List<T> data = new ArrayList<>();public void add(T element) {data.add(element);}@Overridepublic Iterator<T> iterator() {return data.iterator();}
}public class GenericDemo {public static void main(String[] args) {DataContainer<String> stringContainer = new DataContainer<>();stringContainer.add("Hello");stringContainer.add("World");for (String str : stringContainer) {System.out.println(str);}}
}

3.3.3 拓展案例 1:键值对存储

在许多应用中,我们需要存储键值对数据。我们可以创建一个通用的键值对类,并使用泛型来定义键和值的类型。

class KeyValuePair<K, V> {private K key;private V value;public KeyValuePair(K key, V value) {this.key = key;this.value = value;}public K getKey() {return key;}public V getValue() {return value;}
}public class KeyValuePairDemo {public static void main(String[] args) {KeyValuePair<String, Integer> ageOfPerson = new KeyValuePair<>("Alice", 30);System.out.println(ageOfPerson.getKey() + ": " + ageOfPerson.getValue());}
}

3.3.4 拓展案例 2:类型安全的交换函数

在进行数据处理时,我们经常需要交换两个元素的位置。我们可以编写一个使用泛型的交换函数,以确保我们可以安全地交换同一类型的两个元素。

public class SwapDemo {public static <T> void swap(T[] array, int pos1, int pos2) {T temp = array[pos1];array[pos1] = array[pos2];array[pos2] = temp;}public static void main(String[] args) {Integer[] numbers = {1, 2, 3, 4, 5};swap(numbers, 1, 3); // 交换位置 1 和位置 3 的元素System.out.println(Arrays.toString(numbers));}
}

通过这些案例,我们可以看到泛型和迭代器如何增强 Java 程序的灵活性和类型安全性。泛型让我们可以编写可重用且类型安全的代码,而迭代器则提供了一种标准的方法来遍历集合中的数据。掌握这些特种兵的技能将使你在处理复杂数据时更加得心应手。继续前进,勇敢地使用这些工具来解决你面临的编程挑战吧!

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

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

相关文章

Intelij Terminal中文乱码解决

第一&#xff1a; &#xff08;重启Intelij生效&#xff09; -Dfile.encodingUTF-8 第二&#xff1a; &#xff08;重启Intelij生效&#xff09; 如果还不行&#xff0c;第三&#xff1a; 测试结果很ok&#xff1a;

w28pikachu-csrf实例

pikachu-csrf实例 get级别 这里需要同时修改性别、手机、住址、邮箱。 写一个简单的html文件&#xff0c;里面伪装修改密码的文字&#xff0c;代码如下&#xff1a; <html><body><a href"http://pikachu:7002/vul/csrf/csrfget/csrf_get_edit.php?sex…

论文阅读_用模型模拟记忆过程

英文名称: A generative model of memory construction and consolidation 中文名称: 记忆构建和巩固的生成模型 文章: https://www.nature.com/articles/s41562-023-01799-z 代码: https://github.com/ellie-as/generative-memory 作者: Eleanor Spens, Neil Burgess&#xff…

智慧供应链控制塔大数据解决方案

一、供应链控制塔的概念定义 (1) Gartner 的定义: “控制塔是一个物理或虚拟仪表板,提供准确的、及时的、完整的物流事件和数据,从组织和服务的内部和跨组织运作供应链,以协调所有相关活动。”、“供应链控制塔…提供供应链端到端整体可见性和近实时信息和决策的概念……

深入解析Mybatis-Plus框架:简化Java持久层开发(二)

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 本章节开始从实际的应用场景&#xff0c;来讲解Mybatis-Plus常用的一些操作&#xff0c;根据业务场景来进行增删改查的功能&#xff0c;首先先搭建一个项目…

内容检索(2024.02.17)

随着创作数量的增加&#xff0c;博客文章所涉及的内容越来越庞杂&#xff0c;为了更为方便地阅读&#xff0c;后续更新发布的文章将陆续在此汇总并附上原文链接&#xff0c;感兴趣的小伙伴们可持续关注文章发布动态&#xff01; 本期更新内容&#xff1a; 1. 信号完整性理论与…

印度基金低风险套利回顾

2024年1月19日当天&#xff0c;印度基金(164824)开放申购&#xff0c;限额申购100元&#xff0c;当天溢价率13%左右&#xff0c;这个溢价率已经非常可观了&#xff0c;当然要祭出一拖七大法搞它一把&#xff01; 一拖七套利原理简介 详细的原理和方法可自行在雪球搜索&#…

ACM题解Day4 | Boring Non-Palindrome ,Mental Rotation ,so Easy

学习目标&#xff1a; 博主介绍: 27dCnc 专题 : 数据结构帮助小白快速入门算法 &#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d; ☆*: .&#xff61;. o(≧▽…

时间序列预测模型:ARIMA模型

1. ARIMA模型原理介绍 ARIMA模型&#xff0c;全称为自回归积分滑动平均模型&#xff08;Autoregressive Integrated Moving Average Model&#xff09;&#xff0c;是一种常用的时间序列预测方法。ARIMA模型通过对时间序列数据的差分化处理&#xff0c;使非平稳时间序列数据变…

鸿蒙系统优缺点,能否作为开发者选择

凡是都有对立面&#xff0c;就直接说说鸿蒙的优缺点吧。 鸿蒙的缺点&#xff1a; 鸿蒙是从2019年开始做出来的&#xff0c;那时候是套壳Android大家都知晓。从而导致大家不看鸿蒙系统&#xff0c;套壳Android就是多次一举。现在鸿蒙星河版已经是纯血鸿蒙&#xff0c;但是它的…

点亮代码之灯,程序员的夜与电脑

在科技的海洋里&#xff0c;程序员是那些驾驶着代码船只&#xff0c;穿梭于虚拟世界的探险家。他们手中的键盘是航行的舵&#xff0c;而那台始终不愿关闭的电脑&#xff0c;便是他们眼中永不熄灭的灯塔。有人说&#xff0c;程序员不喜欢关电脑&#xff0c;这究竟是为什么呢&…

SSM框架,spring-aop的学习

代理模式 二十三种设计模式中的一种&#xff0c;属于结构型模式。它的作用就是通过提供一个代理类&#xff0c;让我们在调用目标方法的时候&#xff0c;不再是直接对目标方法进行调用&#xff0c;而是通过代理类间接调用。让不属于目标方法核心逻辑的代码从目标方法中剥离出来…

PPT导出PDF时保持图像高清的方法

问题: 我们经常会发现&#xff0c;在PPT中插入的图片非常高清&#xff0c;但是通过PPT转换为PDF之后&#xff0c;图片就会出现不同程度的失真。 问题产生的原因: 这是因为Acrobat的PDF Maker在将PPT转换为PDF的时候&#xff0c;对PPT中的图片进行了压缩 Solution: 在PPT的…

博途PLC数值积分器(矩形梯形积分自由切换)

数值积分器的相关介绍,大家可以也可以参看下面几篇文章,链接如下: PLC算法系列数值积分器 https://rxxw-control.blog.csdn.net/article/details/128562853https://rxxw-control.blog.csdn.net/article/details/128562853SMART PLC 梯形和矩形积分 https://rxxw-control.…

【数据结构】18 二叉搜索树(查找,插入,删除)

定义 二叉搜索树也叫二叉排序树或者二叉查找树。它是一种对排序和查找都很有用的特殊二叉树。 一个二叉搜索树可以为空&#xff0c;如果它不为空&#xff0c;它将满足以下性质&#xff1a; 非空左子树的所有键值小于其根节点的键值非空右子树的所有键值都大于其根结点的键值左…

2.16学习总结

1.邮递员送信&#xff08;dijkstra 不只是从起到到目标点&#xff0c;还要走回去&#xff09; 2.炸铁路(并查集) 3.统计方形&#xff08;数据加强版&#xff09;&#xff08;排列组合&#xff09; 4.滑雪&#xff08;记忆化&#xff09; 5.小车问题&#xff08;数学问题&#x…

无人机系统组装与调试,多旋翼无人机组装与调试技术详解,无人机飞控系统原理

多旋翼无人机飞控系统的组装 在开始组装前&#xff0c;确保您已准备好所有必要的工具和材料。这包括螺丝刀、电烙铁、焊台、杜邦线、飞控板、GPS模块、电机、桨叶等。 飞控安装 安全开关安装&#xff0c;将安全开关固定在机架上。将安全开关的线插到飞控SWITCH插口上。 电调…

【半监督图像分割 2023 】BHPC

【半监督图像分割 2023 】BHPC 论文题目&#xff1a;Semi-supervised medical image segmentation via hard positives oriented contrastive learning 中文题目&#xff1a;通过面向硬阳性的对比学习进行半监督医学图像分割 论文链接&#xff1a; 论文代码&#xff1a;https:/…

亚马逊、国际站、速卖通新店怎么销量破冰?自养号测评爆款打造思路

亚马逊作为全球最大的电子商务平台之一&#xff0c;吸引了众多卖家进驻其平台。对于新店铺来说&#xff0c;如何在竞争激烈的市场中突破销量瓶颈&#xff0c;成为卖家们关注的焦点。 一、亚马逊新店怎么销量破冰&#xff1f; 优化商品信息&#xff1a;在亚马逊平台上&#xff…

牛客网SQL进阶128:未完成试卷数大于1的有效用户

官网链接&#xff1a; 未完成试卷数大于1的有效用户_牛客题霸_牛客网现有试卷作答记录表exam_record&#xff08;uid用户ID, exam_id试卷ID, st。题目来自【牛客题霸】https://www.nowcoder.com/practice/46cb7a33f7204f3ba7f6536d2fc04286?tpId240&tqId2183007&ru%2…