【持续更新】java刷题常用数据结构、方法和思路

动态数组——ArrayList

ArrayList类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素;ArrayList 继承了 AbstractList ,并实现了 List 接口。


实例化方法:ArrayList<T> arr = new ArrayList<>();   其中T为泛型数据类型

ArrayList 是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。

函数方法

add():添加元素到ArrayList,如 arr.add("Weibo")就是在arr最后加上一个元素,叫"Weibo"。

remove():删除ArrayList中的元素,如arr.remove(3)就是删除第四个元素。

set():修改ArrayList中的元素,其中第一个参数为索引位置,第二个为要修改的值。

如arr.set(2, "Wiki")就是把第三个元素的值修改为"Wiki"。

get():参数为索引,获取对应位置的值。

LinkedList(栈,队列,容器)

LinkedList既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(stack),它的底层通过双向链表实现,双向链表的每个节点用内部类Node表示,通过first和last引用分别指向链表的第一个和最后一个元素。

栈(Stack)


废弃栈的实例化方法:Stack<T> stack = new Stack<>();

现在栈的实例化方法:Deque<T> stack = new LinkedList<Integer>();

或者直接用LinkedList<T> stack

函数方法

peek():查看堆栈顶部的对象,但不从堆栈中移除它,和pop()区分(查看且删除)。

isEmpty():判断栈是否为空。

push():把项压入堆栈顶部,对应的删除是pop()。

队列(Queue)

Queue 作为先进先出队列,只能从头部取元素、插入元素到尾部。Java 同样定义了双向队列 Deque,可以同时在头部、尾部插入和取出元素。

实例化方法: LinkedList<T> queue = new LinkedList<>();

或者  Queue<T> queue = new LinkedList<>();

函数方法

压入元素(添加):add()、offer()
相同:未超出容量,从队尾压入元素,返回压入的那个元素。
区别:在超出容量时,add()方法会对抛出异常,offer()返回false。

弹出元素(删除):remove()、poll()
相同:容量大于0的时候,删除并返回队头被删除的那个元素。
区别:在容量为0的时候,remove()会抛出异常,poll()返回false。

获取队头元素(不删除):element()、peek()
相同:容量大于0的时候,都返回队头元素。但是不删除。
区别:容量为0的时候,element()会抛出异常,peek()返回null。

addFirst()/addLast():插入元素到队列头部/尾部,失败则抛出异常。

removeFirst()/removeLast():取出并移除头部元素/尾部元素,空队列抛出异常。

peekFirst()/peekLast():取出但不移除头部元素/尾部元素,空队列返回null。

size():获取队列长度。

优先队列(堆,PriorityQueue

添加到 PriorityQueue 队列里面的元素都经过了排序处理,默认按照自然顺序,也可以通过 Comparator 接口进行自定义排序。它采用树形结构来描述元素的存储,具体说是通过完全二叉树实现一个小顶堆,在物理存储方面,PriorityQueue 底层通过数组来实现元素的存储。

由于 PriorityQueue 的底层是基于堆实现的,因此在数据量比较大时,使用 PriorityQueue 可以获得较好的时间复杂度。


优先队列默认的是最小堆(优先弹出最小值)

实例化方法

最小堆(默认):PriorityQueue<T> queue = new PriorityQueue<>();

最大堆:PriorityQueue<T> queue = new PriorityQueue<>(int capacity, (num1, num2) -> num2-num1);

方法:peek、poll、add、isEmpty、size…(类似队列)

集合(Map、List、Set)

HashMap 是 Java 中非常常用的数据结构之一,用于存储键值对。在 HashMap 中,每个键都映射到一个唯一的值,可以通过键来快速访问对应的值,算法时间复杂度可以达到 O(1)。


哈希表(HashMap)

HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。它实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null不支持线程同步。HashMap 是无序的,即不会记录插入的顺序。

HashMap 的 key 与 value 类型可以相同也可以不同,可以是字符串(String)类型的 key 和 value,也可以是整型(Integer)的 key 和字符串(String)类型的 value。

HashMap 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类

实例化方法:HashMap<T_Key, T_Value> map = new HashMap<>();

函数方法:

containsKey() / containsValue():检查 hashMap 中是否存在指定的 key / value 对应的映射关系,它是一个布尔类型的值,有则返回true,没有则返回false。

get():获取指定 key 对应的 value 值,比如map.get("key")。

getOrDefault():这个和get的方法为了实现的目的一样,只是它有两个参数,第一个参数是key,第二个是如果没找到设定的默认值,如getOrDefault(4, "Not Found"),没找到就返回Not Found。

isEmpty():判断hashMap是否为空。

put():将键值对加到hashMap中。

keySet():返回hashMap中所有key组成的集合视图。

entrySet():返回 hashMap 中所有映射项的集合集合视图。

remove():有两个方法,删除 hashMap 中指定键 key 的映射关系。

replace():替换 hashMap 中是指定的 key 对应的 value。以key为参数的remove方法 输入key–>key存在就删除;以key+value为参数的remove方法 必须key和value都正确才删除。

size():删除 hashMap 中指定键 key 的映射关系。

哈希集(HashSet)

List接口

有序表TreeMap


底层基于红黑树实现,是一棵平衡二叉搜索树,它的键是有序排列的

实例化:TreeMap<T1, T2> treeMap = new TreeMap<>();可以传入Comparator实现自定义排序,否则自动按键的默认方法排序

方法:firstKey、lastKey、containsKey、get、getOrDefault、isEmpty、put、remove…

TreeSet类似

类型转化


char与String互相转换


String s = String.valueOf(‘c’); //效率最高的方法

String s = String.valueOf(new char[]{‘a’,‘c’}); //将一个char数组转换成String

char[] sArr = s.toCharArray();


String转int

int i=Integer.parseInt(s);
int i=Integer.valueOf(s).intValue();


int转String


String s = String.valueOf(i);
String s = Integer.toString(i);
String s = “” + i;


StringBuilder构建String


被synchronize修饰的StringBuffer是线程安全的,但刷题为了效率一般都用StringBuilder

实例化:StringBuilder sb = new StringBuilder();

构建String: sb.toString

方法:append、toString、insert、delete…
 

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

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

相关文章

hadoop安装记录

目录 零、版本说明一、环境准备1.1.规划1.2.准备 二、安装配置hadoop 三、启动 零、版本说明 centos [rootnode1 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)jdk [rootnode1 ~]# java -version java version "1.8.0_311" Java(TM) SE Run…

基于微信小程序云开发实现考研题库小程序V2.0

不久之前&#xff0c;基于云开发的微信答题小程序搭建题库小程序V1.0&#xff0c;软件架构是微信原生小程序云开发。现在来回顾一下&#xff0c;已经实现的功能。 一、V1.0项目预览 1、页面结构 首页 答题页 结果页 我的页 排行榜页 答题历史页 登录页 使用指引页 2…

Linux实验一:Linux环境及编程工具

目录 一、实验目的二、实验内容三、参考代码四、实验步骤步骤1. 编辑源代码test1.c步骤2. 编译源代码test1.c步骤3. 调试test1步骤4. 重新编译运行test1.c 五、实验结果六、实验总结 一、实验目的 1、掌握Linux C开发过程中的基本概念&#xff1b; 2、掌握如vim&#xff0c;GC…

tiktok如何影响用户行为的分析兼论快速数据分析的策略

tiktok如何影响用户行为的分析 快速数据分析的策略流程&#xff1a; 1.确定指标变量&#xff0c;也就确定了数据分析想要回答的问题。想回答不同的问题&#xff0c;就选择不同的指标变量。 变量筛选方法选出指标变量相关的变量&#xff1b; 针对筛选出的变量进行描述性分析和因…

汽车新智能图谱里:理解腾讯的AI TO B路径

将自身的C2B产品和产业理解充分AI化&#xff0c;在自身内部场景率先验证跑通后&#xff0c;进而释放给产业伙伴&#xff0c;对应到具体的需求痛点&#xff0c;一起打磨对应的行业AI模型。 这也恰是腾讯“实用”标签背后的AI产业路径。 作者|皮爷 出品|产业家 成本、性价…

目标检测——YOLOv6算法解读

论文&#xff1a;YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications (2022.9.7) 作者&#xff1a;Chuyi Li, Lulu Li, Hongliang Jiang, Kaiheng Weng, Yifei Geng, Liang Li, Zaidan Ke, Qingyuan Li, Meng Cheng, Weiqiang Nie, Yiduo Li, Bo …

PyCharm 中的特殊标记

在使用 PyCharm 开发 Python 项目的时候&#xff0c;经常会有一些特殊的标记&#xff0c;有些是 IDE 提示的代码规范&#xff0c;有些则为了方便查找而自定义的标记。 我在之前写过一些关于异常捕获的文章&#xff1a;Python3 PyCharm 捕获异常报 Too broad exception clause …

科学高效备考AMC8和AMC10竞赛,吃透2000-2024年1850道真题和解析

如何在校内学习之余科学、有效地备考AMC8、AMC10美国数学竞赛&#xff1f;多做真题&#xff0c;吃透真题是科学有效的方法之一&#xff0c;通过做真题&#xff0c;可以帮助孩子找到真实竞赛的感觉&#xff0c;而且更加贴近比赛的内容&#xff0c;可以通过真题查漏补缺&#xff…

【CTF Crypto】CTFShow 萌新 密码3 Writeup(摩尔斯电码+培根密码)

萌新 密码3 3 题目名称&#xff1a;我想吃培根 题目描述&#xff1a; – — .-. … . …–.- … … …–.- -.-. — — .-… …–.- -… …- - …–.- -… .- -.-. — -. …–.- … … …–.- -.-. — — .-… . .-. …–.- – – -… -… – -… – -… – – – -… -… -……

服务器(AIX、Linux、UNIX)性能监视器工具【nmon】使用介绍

目录 ■nmon简介 1.安装 2.使用简介 3.使用&#xff08;具体使用的例子【CPU】【内存】&#xff09; 4.采集数据 5.查看log&#xff08;根据结果&#xff0c;生成报表&#xff09; 6.分析结果 7.设定任务计划&#xff08;Cron&#xff09;&#xff0c;每日执行 ■nmo…

小程序评分/关键词/UV优化助力小程序登顶

随着小程序市场的日益繁荣&#xff0c;小程序搜索排名优化成为了众多开发者关注的焦点。小程序搜索排名被很多因素影响着&#xff0c;关键词、评分还有uv&#xff08;授权&#xff09;等。在本文小柚和各位老板分享如何有效优化小程序搜索排名的经验。 一、关键词策略 关键词是…

PostgreSQL的扩展(extensions)-常用的扩展之pg_repack

PostgreSQL的扩展&#xff08;extensions&#xff09;-常用的扩展之pg_repack pg_repack 是一款非常有用的 PostgreSQL 扩展工具&#xff0c;它能够重新打包&#xff08;repack&#xff09;表和索引以回收空间并减少碎片&#xff0c;而且在这个过程中不会锁定表&#xff0c;允…

【pycharm】调试模式中四个常用按钮介绍

【pycharm】调试模式中四个常用按钮介绍 在 PyCharm 的调试模式中&#xff0c;有四个常用的按钮&#xff0c;它们的功能如下&#xff1a; Step Over (F8)&#xff1a;单步执行&#xff0c;但在遇到函数调用时&#xff0c;不会进入函数内部&#xff0c;而是将整个函数作为一步执…

Laravel 6 - 第十一章 中间件

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

采购数据分析驾驶舱分享,照着它抄作业

今天我们来看一张采购管理驾驶舱。这是一张充分运用了多种数据可视化图表、智能分析功能&#xff0c;从物料和供应商的角度全面分析采购情况的BI数据可视化报表&#xff0c;主要分为三个部分&#xff0c;接下来就分部分来了解一下。 第一部分&#xff1a;关键指标计算及颜色预…

C语言-数据在内存中的存储

我们再之前的篇目中有提到整数在内存中的存储&#xff0c;那么本篇文章将会为大家带来更为详细的内容&#xff0c;包括大小端字节序&#xff0c;以及浮点数如何在内存中存储。 目录 1.整数在内存中的存储 2.大小端字节序和字节序判断 2.1什么是大小端&#xff1f; 2.2为什…

第三篇:Python编程基础:掌握核心语法与开发技巧

Python编程基础&#xff1a;掌握核心语法与开发技巧 1 引言 在这个信息化迅速蔓延的世界中&#xff0c;Python语言如同钥匙一般开启了通往各种可能性的大门。无论你是数据科学家、网络工程师、机器学习专家&#xff0c;还是仅仅对自动化办公感兴趣的办公室人员&#xff0c;Pyt…

Linux 调度优先级

Linux中的每个任务都有其优先级。这个优先级的范围从-20到19。优先级越低&#xff08;-20&#xff09;&#xff0c;分配 给任务的CPU时间就越多。默认的优先级是0。 并非所有的任务都需要使用相同的优先级。交互式应用要求快速响应&#xff0c;通过 crontab 运行的后台…

Feign负载均衡

Feign负载均衡 概念总结 工程构建Feign通过接口的方法调用Rest服务&#xff08;之前是Ribbon——RestTemplate&#xff09; 概念 官网解释: http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign Feign是一个声明式WebService客户端。使用Feign能让…

实验7 利用三层交换机实现VLAN间路由

实验7 利用三层交换机实现VLAN间路由 一、 原理描述二、 实验目的三、 实验内容1.实验场景2.实验要求 四、 实验配置1.实验拓扑2.设备编址 五、 实验步骤1.配置IP地址2.交换机初始配置3.测试连通性4.配置S1的三层接口 一、 原理描述 在“单臂路由”方式实现VLAN间路由时&#…