Java对应C++ STL的用法

sort:

1:java.util.Arrays中的静态方法Arrays.sort()方法,针对基本数据类型和引用对象类型的数组元素排序

2:java.util.Collections中的静态方法的Collections.sort()方法,针对集合框架中的动态数组,链表,树,哈希表等( ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap )进行排序。下面分别介绍两种用法。

Collections.sort(list,new Comparator<Integer>(){//升序排序
    public int compare(Integer str1,Integer str2){
        String s1=str1+""+str2;
        String s2=str2+""+str1;
        return s1.compareTo(s2);//变成-s1.compareTo(s2)就是降序排序了
    }
});

reverse:

对于集合,使用Collections.reverse()

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Collections.reverse(list);

对于字符串,使用StringBuilder.reverse()

String str = "Hello, World!";
StringBuilder reversedStr = new StringBuilder(str).reverse();
ArrayList:

对应于C++的vector容器

#等价于vector<int>vec[maxn]
private final int maxn=(int)2e5+5
ArrayList<Integer>list=new ArrayList[maxn]

将元素插入到指定位置的 arraylist 中
public boolean add(E e)

从集合中获取元素,参数是索引编号,返回值就是对应位置的元素
public E get(int index)

从集合中删除元素,参数是索引编号,返回值就是被删除的元素
public E remove(int index)

获取集合的尺寸长度,返回值是集合中包含的元素个数
public int size()

Stack和Queue容器:

Stack:

import java.util.Stack;
public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        // 添加元素
        stack.push(1);

        // 查看栈顶元素
        int top = stack.peek();

        // 移除栈顶元素
        int popped = stack.pop();
    }
}

Stack 的基本操作

  • push(E item):将元素压入栈顶。
  • pop():移除并返回栈顶元素。
  • peek():返回栈顶元素,但不移除。
  • isEmpty():检查栈是否为空。

Queue:Queue在Java中是一个接口,它的实现类有PriorityQueue和LinkedList,LinkedList即为C++种的Queue

import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();

        // 添加元素
        queue.add(1);

        // 查看队首元素
        int front = queue.peek();

        // 移除队首元素
        int removed = queue.poll();

        // 检查队列是否为空
        boolean isEmpty = queue.isEmpty();
    }
}

Queue 的基本操作

  • add(E e):将元素添加到队列尾部。
  • poll():移除并返回队首元素,如果队列为空则返回 null
  • peek():返回队首元素,但不移除,如果队列为空则返回 null
  • isEmpty():检查队列是否为空。

TreeSet容器:

TreeSet即对应C++中的set:

Integer[]nums={1,2,3,4,5};
ArrayList<Integer>list=new ArrayList<>(List.of(nums));
Collections.addAll(list,4,5,6);
TreeSet<Integer> s = new TreeSet<>(list);
// 遍历集合中的所有元素
Iterator<Integer> it = s.iterator();
while (it.hasNext()) {
    Integer element = it.next();
    if (it.hasNext()) {
        System.out.print(element + " ");
    } else {
        System.out.print(element);
    }
}
  • contains(Object o):检查集合中是否包含指定元素。
  • first()last():获取集合中的第一个和最后一个元素。
  • ceiling(E e)floor(E e):分别返回大于或等于给定元素的最小元素和小于或等于给定元素的最大元素。
  • higher(E e)lower(E e):分别返回严格大于和严格小于给定元素的最小和最大元素。
  • boolean remove(Object o)从集合中删除指定的元素 o,如果删除成功则返回 true

Multiset容器:

Java中没有直接与C++的Multiset对应的容器,不过可以用TreeMap模拟实现,以leetcode该题为例 480. 滑动窗口中位数

class Solution {
    public double[] medianSlidingWindow(int[] nums, int k) {
        int n = nums.length;
        double[] ans = new double[n-k+1];
        Set<int[]> set = new TreeSet<>((a, b)->a[0]==b[0] ? Integer.compare(a[1], b[1]) : Integer.compare(a[0], b[0]));
        for(int i=0; i<k; i++) set.add(new int[]{nums[i], i});        
        for(int i=k, j=0; i<n; i++, j++){
            ans[j] = findMid(set);
            set.add(new int[]{nums[i], i});
            set.remove(new int[]{nums[i-k], i-k});
        }    
        ans[n-k] = findMid(set);
        return ans;
    }
    
    double findMid(Set<int[]> set){
        int mid = (set.size() - 1) / 2;
        var it = set.iterator();
        while(mid-->0) it.next();
        return set.size()%2 == 0 ? ((double)it.next()[0] + it.next()[0]) / 2 : it.next()[0];
    } 
}

TreeMap: 

等价于C++的map

HashMap:

等价于c++的unordered_map

pair和tuple:

lower_bound/upper_bound:

priority_queue:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【mysql的行记录格式】

记录头信息 除了变长字段长度列表、NULL值列表之外&#xff0c;还有一个用于描述记录的记录头信息&#xff0c;它是由固定的5个字节组成。5个字节也就是40个二进制位&#xff0c;不同的位代表不同的意思&#xff0c;如图&#xff1a; 记录的真实数据 对于record_format_demo表来…

linux中的各种指令

按文件的大小进行查找 find / usr -size 100M 在home路径下创建txt文件 touch test.txt 查看test.txt文件中的内容&#xff1a; cat test.txt通过指令pwd可以查看当前所处路径。 切换超级用户的指令&#xff1a; su - root 离开时可以使用指令&#xff1a;exit grep指…

.net 项目中配置 Swagger

一、前言 二、Swagger 三、.net 项目中添加Swagger 1、准备工作 &#xff08;1&#xff09;.net项目 &#xff08;2&#xff09;SwaggerController &#xff08;3&#xff09;XML文档注释 2、安装Swagger包 3、 添加配置swagger中间件 &#xff08;1&#xff09;添加S…

深入理解Unix/Linux中sync、fsync、fdatasync和sync_file_range系统调用以及他们的区别

前言 在linux内核中都有缓冲区或者页面高速缓存&#xff0c;大多数磁盘IO都是通过缓冲写的。当你想将数据write进文件时&#xff0c;内核通常会将该数据复制到其中一个缓冲区中&#xff0c;如果该缓冲没被写满的话&#xff0c;内核就不会把它放入到输出队列中。当这个缓冲区被…

5000字深入讲解:企业数字化转型优先从哪个板块开始?

很多企业都知道数字化转型重要&#xff0c;但不知道应该怎样入手&#xff0c;分哪些阶段。以下引用国内领先数字化服务商 织信Informat 的数字化转型方法论材料&#xff0c;且看看他们是如何看待数字化转型的&#xff1f;数字化转型应该从哪先开始&#xff1f;如何做&#xff1…

编译工具-Gradle

文章目录 Idea中配置Gradle项目project目录settings.gradlebuild.gradlegradlewgradlew.bat Gradle Build生命周期编写Settings.gradle编写Build.gradleTasksPlugins Idea中配置 配置项&#xff1a;gradle位置 及仓库位置 Gradle项目 Task&#xff0c;settings.gradle,build.…

【ai】tx2 nx:ubuntu18.04 yolov4-triton-tensorrt 成功部署server 运行

isarsoft / yolov4-triton-tensorrt运行发现插件未注册? 【ai】tx2 nx: jetson Triton Inference Server 部署YOLOv4 【ai】tx2 nx: jetson Triton Inference Server 运行YOLOv4 对main 进行了重新构建 【ai】tx2 nx :ubuntu查找NvInfer.h 路径及哪个包、查找符号【ai】tx2…

调用京灵平台接口,很详细

调用京灵平台接口&#xff0c;很详细 一、准备1、开发资源2、申请环境 二、测试接口调用1、查看接口文档2、查看示例代码3、引入对应依赖4、改造后需要的依赖5、测试调用 三、工具类1、配置dto2、公共参数dto3、请求参数dto4、响应参数dto4、调用工具类&#xff08;重要&#x…

免费翻译API及使用指南——百度、腾讯

目录 一、百度翻译API 二、腾讯翻译API 一、百度翻译API 百度翻译API接口免费翻译额度&#xff1a;标准版&#xff08;5万字符免费/每月&#xff09;、高级版&#xff08;100万字符免费/每月-需个人认证&#xff0c;基本都能通过&#xff09;、尊享版&#xff08;200万字符免…

matlab中simulink仿真软件的基础操作

&#xff08;本内容源自《详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真》 刘学勇编著的第二章内容&#xff0c;有兴趣的可以阅读该书&#xff09; 例&#xff1a;简单系统输入为两个不同频率的正弦、余弦信号&#xff0c;输出为两信号之和&#xff0c;建立模型。 在…

webpack源码深入--- webpack的编译主流程

webpack5的编译主流程 根据watch选项调用compiler.watch或者是compiler.run()方法 try {const { compiler, watch, watchOptions } create();if (watch) {compiler.watch(watchOptions, callback);} else {compiler.run((err, stats) > {compiler.close(err2 > {callb…

使用鸿蒙HarmonyOs NEXT 开发 快速开发 简单的购物车页面

目录 资源准备&#xff1a;需要准备三张照片&#xff1a;商品图、向下图标、金钱图标 1.显示效果&#xff1a; 2.源码&#xff1a; 资源准备&#xff1a;需要准备三张照片&#xff1a;商品图、向下图标、金钱图标 1.显示效果&#xff1a; 定义了一个购物车页面的布局&#x…

[方法] Unity 3D模型与骨骼动画

1. 在软件中导出3D模型 1.1 3dsmax 2014 1.1.1 TGA转PNG 3dsmax的贴图格式为tga&#xff0c;我们需要在在线格式转换中将其转换为Unity可识别的png格式。 1.1.2 模型导出 导出文件格式为fbx。在导出设置中&#xff0c;要勾选三角算法&#xff0c;取消勾选摄像机和灯光&#…

mysql解压版本安装5.7

1. 官网下载好解压版本 我这边5.7版本 https://dev.mysql.com/downloads/file/?id523570 mysql官网 创建 my.ini文件 内容如下 [client] #客户端设置&#xff0c;即客户端默认的连接参数# socket /data/mysqldata/3306/mysql.sock #用于本地连接的socket套接字 # 默…

运维锅总详解HAProxy

本文尝试从HAProxy简介、HAProxy工作流程及其与Nginx的对比对其进行详细分析&#xff1b;在本文最后&#xff0c;给出了为什么Nginx比HAProxy更受欢迎的原因。希望对您有所帮助&#xff01; HAProxy简介 HAProxy&#xff08;High Availability Proxy&#xff09;是一款广泛使…

【知识学习】阐述Unity3D中Profile和性能的概念及使用方法示例

在Unity3D中&#xff0c;"Profile"和"性能"是两个相关但不同的概念&#xff0c;它们在游戏开发中扮演着重要的角色。 Profile&#xff08;配置文件&#xff09; "Profile"在Unity中通常指的是一种配置文件&#xff0c;它包含了一系列的设置和参…

JAVA医院绩效考核管理系统源码:系统优势、系统目的、系统原则 (自主研发 功能完善 可直接上项目)

JAVA医院绩效考核管理系统源码&#xff1a;系统优势、系统目的、系统原则 &#xff08;自主研发 功能完善 可直接上项目&#xff09; 医院绩效考核系统优势 1.实现科室负责人单独考核 对科室负责人可以进行单独考核、奖金发放。 2. 科室奖金支持发放到个人 支持奖金二次分配&…

Numpy array和Pytorch tensor的区别

1.Numpy array和Pytorch tensor的区别 笔记来源&#xff1a; 1.Comparison between Pytorch Tensor and Numpy Array 2.numpy.array 4.Tensors for Neural Networks, Clearly Explained!!! 5.What is a Tensor in Machine Learning? 1.1 Numpy Array Numpy array can only h…

已解决问题 | 该扩展程序未列在 Chrome 网上应用店中,并可能是在您不知情的情况下添加的

在Chrome浏览器中&#xff0c;如果你看到“该扩展程序未列在 Chrome 网上应用店中&#xff0c;并可能是在您不知情的情况下添加的”这样的提示&#xff0c;通常是因为该扩展程序没有通过Chrome网上应用店进行安装。以下是解决这个问题的步骤&#xff1a; 解决办法&#xff1a;…

Bridging nonnull in Objective-C to Swift: Is It Safe?

Bridging nonnull in Objective-C to Swift: Is It Safe? In the world of iOS development, bridging between Objective-C and Swift is a common practice, especially for legacy codebases (遗留代码库) or when integrating (集成) third-party libraries. One importa…