Java算法做题中用到的-数据结构(对应C++的STL)【java中各种集合的api方法】

news2024/11/18 5:47:00

Java算法做题中用到的-数据结构(对应C++的STL)

    • 一、数组List
      • 初始化
        • 加入元素: add
        • 删除元素: remove(参数是角标)
        • 获取元素:get
        • indexOf() 返回指定元素下标
        • contains()
        • toArray()
      • 排序
        • 方法一:数组排序Comparator<Integer> cmp
        • 方法二:List排序 Collections.sort(arrayMap);
      • 去重 arrayMap = new ArrayList<>(new HashSet<>(arrayMap));
      • indexof的时间复杂度是 o(N)
    • 二、优先队列 PriorityQueue
    • 三、 String
    • 四、超时问题
    • 五、类排序问题(数组用arrays list用collections)
      • 1. 类自身实现 Comparable 实现comparaTo方法
      • 2. 定制排序 Comparator
      • 3. 简化Comparator
    • 六、Deque
    • 七、输入输出
    • 八、Collections
    • 九、Queue
    • 十、Set
    • 十一、Stack

一、数组List

初始化

List<Integer> list = new ArrayList<>();
加入元素: add
删除元素: remove(参数是角标)
获取元素:get
indexOf() 返回指定元素下标
contains()
toArray()

排序

方法一:数组排序Comparator cmp
// import java.util.*;

class Solution {

    static Comparator<Integer> cmp = new Comparator<Integer>() {
        @Override
        public int compare(Integer o1,Integer o2) {
            String s1 = o1+""+o2;
            String s2 = o2+""+o1;
            return s1.compareTo(s2);
        }
    };

    public String printMinNumber(int[] nums) {
        String res = "";
        Integer[] list = new Integer[nums.length];
        int n = nums.length;
        for(int i = 0; i < n; i++){
            list[i] = nums[i];
        }
        Arrays.sort(list,cmp);
        for(int i = 0; i < n; i++){
            res += list[i]+"";
        }
        return res;

    }
}
方法二:List排序 Collections.sort(arrayMap);

去重 arrayMap = new ArrayList<>(new HashSet<>(arrayMap));

indexof的时间复杂度是 o(N)

二、优先队列 PriorityQueue

peek()//返回队首元素
poll()//返回队首元素,队首元素出队列
add()//添加元素
size()//返回队列元素个数
isEmpty()//判断队列是否为空,为空返回true,不空返回false
static Comparator<Integer> cmp = new Comparator<Integer>() {
      public int compare(Integer e1, Integer e2) {
        return e2 - e1;
      }
    };
public static void main(String[] args) {
        //不用比较器,默认升序排列
        Queue<Integer> q = new PriorityQueue<>();
        q.add(3);
        q.add(2);
        q.add(4);
        while(!q.isEmpty())
        {
            System.out.print(q.poll()+" ");
        }
        /**
         * 输出结果
         * 2 3 4 
         */
        //使用自定义比较器,降序排列
        Queue<Integer> qq = new PriorityQueue<>(cmp);
        qq.add(3);
        qq.add(2);
        qq.add(4);
        while(!qq.isEmpty())
        {
            System.out.print(qq.poll()+" ");
        }
        /**
         * 输出结果
         * 4 3 2 
         */
}
PriorityQueue<Integer> queue1 = 
		new PriorityQueue<Integer>();
queue1.add(10);
queue1.add(8);
System.out.println(queue1.poll()); // 8
PriorityQueue<Integer> queue2 = 
		new PriorityQueue<Integer>((o1,o2) -> o1 - o2);
queue2.add(10);
queue2.add(8);
System.out.println(queue2.poll()); // 8
PriorityQueue<Integer> queue3 = 
		new PriorityQueue<Integer>((o1,o2) -> o2 - o1);
queue3.add(10);
queue3.add(8);
System.out.println(queue3.poll()); // 10

在这里插入图片描述

三、 String

  1. cpp中的s[i] 在java中是 s.charAt(i);

四、超时问题

  1. 使用print 和 println 别用 printf
  2. 使用二分

五、类排序问题(数组用arrays list用collections)

1. 类自身实现 Comparable 实现comparaTo方法

package compare;

public class Goods implements Comparable{
    private String name;
    private double price;

    public Goods() {
    }
    
    public Goods(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }

    //重写compareTo方法,并指明排序的方式:先按价格从低到高排序,再按名称从高到低排序
    @Override
    public int compareTo(Object o) {
        //instanceof ,用来测试对象0是否为Goods类的实例
       if (o instanceof Goods){
           Goods goods = (Goods) o;
           if (this.price > goods.price){
               return 1;
           } else if (this.price < goods.price){
               return -1;
           }else {
               return -this.name.compareTo(goods.name);
           }
       }
       throw new RuntimeException("输入类型错误,无法比较");
    }
}

2. 定制排序 Comparator

String[] str = new String[]{"aa","kk","dd","cc"};
Arrays.sort(str, new Comparator<String>() {
    @Override
    //从大到小进行排序
    public int compare(String o1, String o2) {
        return -o1.compareTo(o2);
    }
});
System.out.println(Arrays.toString(str));//[kk, dd, cc, aa]

3. 简化Comparator

//Arrays.sort(range, 0, n, (o1, o2) -> o1.r - o2.r);

六、Deque

addFirst(): 向队头插入元素,如果元素为空,则发生NPE(空指针异常)
addLast(): 向队尾插入元素,如果为空,则发生NPE
offerFirst(): 向队头插入元素,如果插入成功返回true,否则返回false
offerLast(): 向队尾插入元素,如果插入成功返回true,否则返回false
removeFirst(): 返回并移除队头元素,如果该元素是null,则发生NoSuchElementException
removeLast(): 返回并移除队尾元素,如果该元素是null,则发生NoSuchElementException
pollFirst(): 返回并移除队头元素,如果队列无元素,则返回null
pollLast(): 返回并移除队尾元素,如果队列无元素,则返回null
getFirst(): 获取队头元素但不移除,如果队列无元素,则发生NoSuchElementException
getLast(): 获取队尾元素但不移除,如果队列无元素,则发生NoSuchElementException
peekFirst(): 获取队头元素但不移除,如果队列无元素,则返回null
peekLast(): 获取队尾元素但不移除,如果队列无元素,则返回null
pop(): 弹出栈中元素,也就是返回并移除队头元素,等价于removeFirst(),如果队列无元素,则发生NoSuchElementException
push(): 向栈中压入元素,也就是向队头增加元素,等价于addFirst(),如果元素为null,则发生NPE,如果栈空间受到限制,则发生IllegalStateException

七、输入输出

Scanner in = new Scanner(System.in);
PrintWriter out = new PrintWriter(System.out);

八、Collections

文章

九、Queue

在这里插入图片描述

十、Set

在这里插入图片描述

十一、Stack

在这里插入图片描述

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

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

相关文章

HTML笔记-狂神

1. 初识HTML 什么是HTML&#xff1f; Hyper Text Markup Language : 超文本标记语言 超文本包括&#xff1a;文字、图片、音频、视频、动画等 目前使用的是HTML5&#xff0c;使用 W3C标准 W3C标准包括&#xff1a; 结构化标准语言&#xff08;HTML、XML&#xff09; 表现标…

Flask 表单form.validate_on_submit()什么情况下会是false——解决办法

Flask 表单form.validate_on_submit()什么情况下会是false&#xff1f;&#xff1f; 1、在form中受到validators控制&#xff0c;不满足条件就会导致false 2、在form中使用了raise抛出异常后也会false。 3、表单的地方没写{{ form.csrf_token }}&#xff0c;在HTML 里加上就好…

FTP的主动传输和被动传输以及实现FTPClient连接池-meethigher

一、概述 FTP&#xff08;File Transfer Protocol&#xff09;是一种基于TCP实现的用于在计算机之间传输文件的可靠协议&#xff0c;它屏蔽了各种计算机系统的细节&#xff0c;适用于在异构环境中&#xff0c;进行数据传输。它允许用户从一个计算机&#xff08;FTP客户端&…

驱动开发day4(实现通过字符设备驱动的分布实现编写LED驱动,实现设备文件的绑定)

头文件&#xff08;head.h&#xff09; #ifndef __HEAD_H__ #define __HEAD_H__ #define PHY_LED1_MODER 0x50006000 #define PHY_LED2_MODER 0x50007000 #define PHY_LED3_MODER 0x50006000 #define PHY_LED1_ODR 0x50006014 #define PHY_LED2_ODR 0x50007014 #define PHY_LE…

Yakit工具篇:中间人攻击(平替Burp)的相关技巧-02

简介 前面写了一篇中间人攻击的代理与劫持相关的配置&#xff0c;今天来介绍一下劫持过程相关的详细设置&#xff0c;以及标记/替换流量&#xff0c;History处理&#xff0c;过滤流量&#xff0c;网站树视角等使用技巧和流程。 劫持的详细解释 劫持界面 开始劫持前我们先对…

QWidget快速美化-圆形蓝色单选框

将代码复制进QRadioButton的样式表 效果: 代码: QRadioButton{font:75 9pt "Arial";background:transparent;color:white;border:none; }QRadioButton:disabled{color:gray; }QRadioButton::indicator{width:12px;height:12px;border-radius:8px; }QRadioButton::i…

leetcode:2347. 最好的扑克手牌(python3解法)

难度&#xff1a;简单 给你一个整数数组 ranks 和一个字符数组 suit 。你有 5 张扑克牌&#xff0c;第 i 张牌大小为 ranks[i] &#xff0c;花色为 suits[i] 。 下述是从好到坏你可能持有的 手牌类型 &#xff1a; "Flush"&#xff1a;同花&#xff0c;五张相同花色的…

CUDA学习笔记(十五)Stream and Event

Stream 一般来说&#xff0c;cuda c并行性表现在下面两个层面上&#xff1a; Kernel levelGrid level 到目前为止&#xff0c;我们讨论的一直是kernel level的&#xff0c;也就是一个kernel或者一个task由许多thread并行的执行在GPU上。Stream的概念是相对于后者来说的&…

c语言进制的转换8进制转换2进制与2转8

c语言进制的转换之8进制转换2进制与2转8 c语言的进制的转换 c语言进制的转换之8进制转换2进制与2转8一、八四二一法则二、二进制转换八进制方法三、八进制转换二进制方法四、八进制程序打印 一、八四二一法则 二、二进制转换八进制方法 如&#xff1a;111000110101001转换成八…

爬虫使用什么库更事半功倍?

目录 一、requests库 二、BeautifulSoup库 三、Scrapy框架 四、selenium库 五、Pyppeteer库 六、Scrapy-Splash库 总结 在当今的大数据时代&#xff0c;爬虫技术已经成为了收集和处理大量数据的重要手段。而选择合适的库可以大大提高爬虫的效率和准确性。本文将介绍一些…

桶装水水厂送水小程序开发

桶装水小程序是水店水厂进行线上营销的关键工具&#xff0c;帮助打通线上线下&#xff0c;方便用户在线下单&#xff0c;也方便水店水厂做好门店管理。 桶装水小程序&#xff0c;即订水小程序&#xff0c;专为水店水厂打造&#xff0c;助力实现信息化门店管理&#xff0c;同时…

如何从零设计开发一个软件程序

前言 当参与了许多项目&#xff0c;或者见识了许多优秀的软件&#xff0c;难免心里会有一些波澜和冲动。谁又不想拥有一个自己的软件呢? 但是当自己独立开发一个软件时&#xff0c;发现挺难的,不知道该如何下手。 结合自己开发软件的心得进行描述&#xff0c;可能或多或少与你…

2003-2020年全国各地级市金融发展水平测算数据(含原始数据和具体测算过程)

2003-2020年全国各地级市金融发展水平测算数据 1、时间&#xff1a;2003-2020年 2、来源&#xff1a;城市统计年鉴 3、指标&#xff1a;年末金融机构存款余额、金融机构贷款余额、GDP、金融发展水平 4、范围&#xff1a;300个地级市 5、计算公式&#xff1a;金融发展水平&…

小团队管理的艺术:实现1+1>2的协同效能

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 在现代工作环境中&#…

【Solidity】智能合约案例——③版权保护合约

目录 一、合约源码分析&#xff1a; 二、合约整体流程&#xff1a; 1.部署合约&#xff1a; 2.添加实体&#xff1a; 3.查询实体 4.审核版权&#xff1a; 5.版权转让 一、合约源码分析&#xff1a; Copyright.sol&#xff1a;主合约&#xff0c;定义了版权局的实体&#xff…

SpringBoot轻松实现ip解析(含源码)

文章目录 前言应用场景(1)网站访问分析(2)欺诈风险控制(3)限制服务区域(4)显示访问者来源 示例前期准备Ip2region 特性1、IP 数据管理框架2、数据去重和压缩3、极速查询响应 版本依赖导入库具体代码ConstantAddressUtils(在线解析)IpUtil(离线解析)IpController执行结果 总结源…

Redis的持久化策略:RDB与AOF(面试题详解)

文章来源&#xff1a;Redis持久化的两种方式&#xff1a;RDB与AOF&#xff08;详解&#xff09;&#xff0c;订正了一些错误 一、概述&#xff1a; RDB和AOF持久化的由来&#xff1f; 因为Redis中的数据是基于内存的&#xff0c;所以如果出现服务器断电或者服务器宕机&#xf…

Spring Boot集成SpringFox 3.0与Pageable参数处理

Springfox 3.0有多个模块&#xff0c;提供了spring boot starter&#xff0c;与Spring Boot集成时仅需引入springfox-boot-starter&#xff0c;如下&#xff1a; <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter<…

FL Studio 21 for Mac中文破解版百度网盘免费下载安装激活

FL Studio 21 for Mac中文破解版是Mac系统中的一款水果音乐编辑软件&#xff0c;提供多种插件&#xff0c;包括采样器、合成器和效果器&#xff0c;可编辑不同风格的音乐作品&#xff0c;Pattern/Song双模式&#xff0c;可兼容第三方插件和音效包&#xff0c;为您的创意插上翅膀…

ElementType枚举类

作用 可用于注解Target指定作用位置&#xff0c;例如&#xff1a;在注释类上声明作用于注解 种类 TYPE类、接口&#xff08;包括注释类型&#xff09;或枚举声明FIELD字段声明&#xff08;包括枚举常量METHOD方法声明PARAMETER形式化参数说明CONSTRUCTOR构造函数说明LOCAL_VAR…