Java学习教程,从入门到精通, Java Algorithms(算法)语法知识点(66)

news2024/12/22 6:08:38

Java Algorithms(算法)语法知识点及案例代码

Java集合框架提供了各种算法,可用于处理存储在数据结构中的元素。
Java中的算法是静态方法,可用于对集合执行各种操作。
由于算法可用于各种集合,因此也称为通用算法

让我们看看集合框架中可用的不同方法的实现。

1.使用sort()排序

sort()集合框架提供的方法用于对元素进行排序。例如,

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {

        //创建数组列表
        ArrayList<Integer> numbers = new ArrayList<>();

        //添加元素
        numbers.add(4);
        numbers.add(2);
        numbers.add(3);
        System.out.println("未排序的ArrayList: " + numbers);

        // 使用sort()方法
        Collections.sort(numbers);
        System.out.println("已排序的ArrayList: " + numbers);

    }
}

输出结果

未排序的ArrayList: [4, 2, 3]
已排序的ArrayList: [2, 3, 4]

在此,排序以自然顺序(升序)进行。 但是,我们可以使用Comparator接口自定义sort()方法的排序顺序。

要了解更多信息,请访问Java Sorting。

2.使用shuffle进行洗牌

Java Collections框架的shuffle()方法用于打乱数据结构中出现的任何顺序。它的作用与排序正好相反。例如

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {

        //创建数组列表
        ArrayList<Integer> numbers = new ArrayList<>();

        //添加元素
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        System.out.println("Sorted ArrayList: " + numbers);

        //使用shuffle()方法
        Collections.shuffle(numbers);
        System.out.println("使用shuffle的ArrayList: " + numbers);

    }
}

输出结果

Sorted ArrayList: [1, 2, 3]
使用shuffle的ArrayList: [2, 1, 3]

当我们运行程序时,shuffle()方法将返回随机输出。

洗牌算法主要用于需要随机输出的游戏中。

3.常规数据处理

在Java中,集合框架提供了可用于处理数据的不同方法。

  • reverse() - 反转元素的顺序
  • fill() - 用指定的值替换集合中的每个元素
  • copy() - 创建从指定源到目标的元素副本
  • swap() - 交换集合中两个元素的位置
  • addAll() - 将集合的所有元素添加到其他集合

例如,

import java.util.Collections;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        //创建一个ArrayList
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        System.out.println("ArrayList1: " + numbers);

        // 使用 reverse()
        Collections.reverse(numbers);
        System.out.println("反转 ArrayList1: " + numbers);

        // 使用 swap()
        Collections.swap(numbers, 0, 1);
        System.out.println("ArrayList1 使用 swap(): " + numbers);

        ArrayList<Integer> newNumbers = new ArrayList<>();

        // 使用 addAll
        newNumbers.addAll(numbers);
        System.out.println("ArrayList2 使用 addAll(): " + newNumbers);

        // 使用 fill()
        Collections.fill(numbers, 0);
        System.out.println("ArrayList1 使用 fill(): " + numbers);

        // 使用 copy()
        Collections.copy(newNumbers, numbers);
        System.out.println("ArrayList2 使用 copy(): " + newNumbers);
    }
}

输出结果

ArrayList1: [1, 2]
反转 ArrayList1: [2, 1]
ArrayList1 使用 swap(): [1, 2]
ArrayList2 使用 addALl(): [1, 2]
ArrayList1 使用 fill(): [0, 0]
ArrayList2 使用 copy(): [0, 0]

注意:执行copy()方法时,两个列表的大小应相同。

4.使用binarySearch()搜索

Java集合框架的binarySearch()方法搜索指定的元素。它返回元素在指定集合中的位置。例如,

import java.util.Collections;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        //创建一个ArrayList
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);

        // 使用 binarySearch()
        int pos = Collections.binarySearch(numbers, 3);
        System.out.println("3的位置是 " + pos);
    }
}

输出结果

3的位置是 2

注意:在执行binarySearch()方法之前,应对集合进行排序。

要了解更多信息,请访问Java Binary Search。

5.组合

  • frequency() - 返回元素在集合中存在的次数计数
  • disjoint() - 检查两个集合是否包含一些公共元素

例如,

import java.util.Collections;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        //创建一个ArrayList
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(2);
        System.out.println("ArrayList1: " + numbers);

        int count = Collections.frequency(numbers, 2);
        System.out.println("Count of 2: " + count);

        ArrayList<Integer> newNumbers = new ArrayList<>();
        newNumbers.add(5);
        newNumbers.add(6);
        System.out.println("ArrayList2: " + newNumbers);

        boolean value = Collections.disjoint(numbers, newNumbers);
        System.out.println("两个列表是不相交的? " + value);
    }
}

输出结果

ArrayList1: [1, 2, 3, 2]
Count of 2: 2
ArrayList2: [5, 6]
两个列表是不相交? true

6.寻找最大和最小元素

Java集合框架的min()和max()方法分别用于查找最小和最大元素。例如,

import java.util.Collections;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        //创建一个ArrayList
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);

        // 使用 min()
        int min = Collections.min(numbers);
        System.out.println("最小元素: " + min);

        // 使用 max()
        int max = Collections.max(numbers);
        System.out.println("最大元素: " + max);
    }
}

输出结果
最小元素: 1
最大元素: 3

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

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

相关文章

docker部署Melody开源音乐管理工具

Melody是一款非常实用的开源音乐管理工具。它不仅功能强大、操作简便&#xff0c;还支持多平台检索和一键下载/上传功能。更重要的是&#xff0c;它还支持一键“解锁”无法播放的歌曲和多端适配。如果你也是音乐爱好者&#xff0c;不妨试试Melody&#xff0c;让你的音乐生活更加…

问题小记-达梦数据库报错“字符串转换出错”处理

最近遇到一个达梦数据库报错“-6111: 字符串转换出错”的问题&#xff0c;这个问题主要是涉及到一条sql语句的执行&#xff0c;在此分享下这个报错的处理过程。 问题表现为&#xff1a;一样的表结构和数据&#xff0c;执行相同的SQL&#xff0c;在Oracle数据库中执行正常&…

day4:tomcat—maven-jdk

一&#xff0c;java项目部署过程 编译&#xff1a;使用javac命令将.java源文件编译成.class宇节码文件打包&#xff1a;使用工具如maven或Gradle将项目的依赖、资源和编译后的字节码打包成一个分发格式&#xff0c;如.jar文件&#xff0c;或者.war文件(用于web应用&#xff09…

【D3.js in Action 3 精译_046】DIY 实战:在 Observable 平台利用饼图布局函数实现 D3 多个环形图的绘制

当前内容所在位置&#xff1a; 第五章 饼图布局与堆叠布局 ✔️ 5.1 饼图和环形图的创建 ✔️ 5.1.1 准备阶段&#xff08;一&#xff09;5.1.2 饼图布局生成器&#xff08;二&#xff09;5.1.3 圆弧的绘制&#xff08;三&#xff09;5.1.4 数据标签的添加&#xff08;四&#…

Swin transformer 论文阅读记录 代码分析

该篇文章&#xff0c;是我解析 Swin transformer 论文原理&#xff08;结合pytorch版本代码&#xff09;所记&#xff0c;图片来源于源paper或其他相应博客。 代码也非原始代码&#xff0c;而是从代码里摘出来的片段&#xff0c;配上简单数据&#xff0c;以便理解。 当然&…

Vscode搭建C语言多文件开发环境

一、文章内容简介 本文介绍了 “Vscode搭建C语言多文件开发环境”需要用到的软件&#xff0c;以及vscode必备插件&#xff0c;最后多文件编译时tasks.json文件和launch.json文件的配置。即目录顺序。由于内容较多&#xff0c;建议大家在阅读时使用电脑阅读&#xff0c;按照目录…

麒麟操作系统服务架构保姆级教程(二)sersync、lsync备份和NFS持久化存储

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 上篇文章我们说到rsync虽好&#xff0c;但是缺乏实时性&#xff0c;在实际应用中&#xff0c;咱们可以将rsync写进脚本&#xff0c;然后写进定时任务去备份&#xff0c;如果每天凌晨1&#xff1a;00…

关于小程序内嵌h5打开新的小程序

关于小程序内嵌h5打开新的小程序 三种方式 https://juejin.cn/post/7055551463489011749 只依赖于h5本身的就是 https://huaweicloud.csdn.net/64f97ebb6b896f66024ca16c.html https://juejin.cn/post/7055551463489011749 navigateToMiniProgram 故小程序webview里的h5无法…

QP:Query切词

Query 分词&#xff08;切词&#xff09; 分词指将一段连续的文本切成一个个独立且有意义的词汇&#xff0c;在文本召回中会对 Doc 文本内容分词以构建索引&#xff0c;并通过对查询词 Query 分词后去做检索。Query 分词在搜索中是一个基础信号&#xff0c;除了文本召回&#…

鸿蒙元服务从0到上架【第二篇】

第一招&#xff1a;在AppGallery后台下载对应的证书等文件 AppGallery后台 新增发布证书&#xff0c;具体操作可查看申请发布证书 申请发布Profile证书 第二招&#xff1a;在IDE中填写 第三招&#xff1a;打包【⚠️发布上架的只能是Build App】 终端展示这一片绿&#xf…

9_HTML5 SVG (5) --[HTML5 API 学习之旅]

SVG 模糊效果 HTML5中的SVG&#xff08;可缩放矢量图形&#xff09;允许我们创建高质量的二维图形&#xff0c;包括应用各种滤镜效果。模糊效果是通过<feGaussianBlur>滤镜原语来实现的。下面我将给出4个使用SVG进行模糊效果处理的示例&#xff0c;并为每个代码段添加详…

vue+node+mysql8.0,详细步骤及报错解决方案

1.下载需要安装的插件 下载express npm install express下载cors&#xff0c;用于处理接口跨域问题 npm install cors下载mysql npm install mysql 2.配置服务器 可以在vue项目的src同级创建server文件夹&#xff08;这里的位置可随意选择&#xff09; 然后依次创建&#…

相机雷达外参标定综述“Automatic targetless LiDAR–camera calibration: a survey“

相机雷达外参标定综述--Automatic targetless LiDAR–camera calibration: a survey 前言1 Introduction2 Background3 Automatic targetless LiDAR–camera calibration3.1 Information theory based method(信息论方法)3.1.1 Pairs of point cloud and image attributes(属性…

Epic游戏使用mod

以土豆兄弟为例&#xff1a; 第一步&#xff1a;获取 SteamCMD 下载官方 Steam 控制台客户端 (steamCMD) 1. 下载好后打开&#xff0c;是一个在 cmd 窗口的运行的命令行 2. 输入以下代码登录 login anonymous 第二步&#xff1a; 确认自己要下载的游戏 ID 和 mod ID 然后…

EGO Swarm翻译

目录 摘要 Ⅰ 介绍 Ⅱ 相关工作 A . 单四旋翼局部规划 B . 拓扑规划 C. 分布式无人机集群 Ⅲ 基于梯度的局部规划隐式拓扑轨迹生成 A.无需ESDF梯度的局部路径规划 B.隐式拓扑轨迹生成 Ⅳ 无人机集群导航 A 机间避碰 B. 定位漂移补偿 C. 从深度图像中去除agent Ⅴ …

FFmpeg 框架简介和文件解复用

文章目录 ffmpeg框架简介libavformat库libavcodec库libavdevice库 复用&#xff08;muxers&#xff09;和解复用&#xff08;demuxers&#xff09;容器格式FLVScript Tag Data结构&#xff08;脚本类型、帧类型&#xff09;Audio Tag Data结构&#xff08;音频Tag&#xff09;V…

基于LSTM长短期记忆神经网络的多分类预测【MATLAB】

在深度学习中&#xff0c;长短期记忆网络&#xff08;LSTM, Long Short-Term Memory&#xff09;是一种强大的循环神经网络&#xff08;RNN&#xff09;变体&#xff0c;专门为解决序列数据中的长距离依赖问题而设计。LSTM因其强大的记忆能力&#xff0c;广泛应用于自然语言处理…

在Excel中如果制作可以自动填充的序号,删除或者合并单元也可用

大家好&#xff0c;我是小鱼。在日常的办公中有时需要制作带序号的表格&#xff0c;这样可以通过序号来直观地看到有多少条信息&#xff0c;但是如果普通的批量添加序号的话&#xff0c;一旦我们删除或者合并某几行数据&#xff0c;前面的序号不会自动更新&#xff0c;序号显示…

从ESP8266编程到树莓派Pico集成:实现手机APP控制LED灯

物联网(IoT)技术正广泛应用于智能家居领域,通过WiFi模块(如ESP8266)连接嵌入式开发板(如树莓派Pico),可实现设备远程控制。本文将从ESP8266模块的固件编程开始,直至其与树莓派Pico集成,完成通过手机APP远程控制LED灯的功能实现。 一、项目目标 通过手机APP与ESP8266…

【机器学习】分而知变,积而见道:微积分中的世界之思

文章目录 微积分基础&#xff1a;理解变化与累积的数学前言一、微积分概述与基础概念1.1 微积分的定义与重要性1.1.1 微积分的基本组成1.1.2 微积分在机器学习中的应用 1.2 微积分的历史与发展 二、极限与连续性2.1 极限的定义与计算2.1.1 极限的直观理解2.1.2 极限的数学定义2…