java中的数据结构与集合类

ESP32-P4开发板实战:从零配置VSCode环境到点亮MIPI-DSI屏幕(避坑指南) 本文详细介绍了ESP32-P4开发板在VSCode环境下的配置流程,包括SDK安装、idf_component.yml依赖管理,以及MIPI-DSI屏幕驱动的实现方法。通过实战指南帮助开发者避开常见配置陷阱,快速完成从环境搭建到屏幕点亮的全流程,适用于物联网和嵌入式开发场景。 阅读详情

最近在学算法,但是稍微复杂一点的算法都用到了数据结构,数据结构java有已经实现的类,为了以后写算法题方便,现把算法中用到的所有数据结构结合java集合类整理一编

一、首先从java的角度来看

java集合框架图

从上方的图来分析,最顶层的和数据结构相关的就是map和collection

  • 继承collection的都是线性结构涉及到的线性结构有
    • list 继承其的类都具最基础的添加和删除方法add remove
    • set 继承此类的具有无重复的特点,具有添加和删除方法add remove
    • queue 可以说是队列,实现他的直接接口都是各种队列,具体方法有很多,下面详细分析的时候再写
  • 继承map的方法数据结构中都带有键值对即 <K,V> ,这种数据结构在算法题中用处非常大,很多的地方都会用到,是十分重要的数据结构
  • 此外还有迭代器类和方法,也十分重要

二、从数据结构的角度来看

数据结构有 栈 队列 链表 优先队列 树 等等结构在java中全部实现可以说相对于C语言做算法题的时候省了很多功夫

Java集合类使用注意

集合类一般都有泛型,泛型中不能写基本类型,只能写其中的包装类,一般包装类不谈,有一个包装类不常用,而且比较特殊 char的包装类是 Character,我就经常会忘记。。。

链表 ArrayList LinkedList Arrays

这里主要介绍ArrayLIst和Arrays这两个类,这也是我常常使用到的。
ArrayList和LinkedList是很相似的结构但是内里稍有不同,ArrayList内部使用数组实现,LinkedList内部使用链表实现。使用起来各有不同的优势,但是我常用的就是ArrayList。

ArrayList

  • add() 添加
  • remove() 删除
  • get() 根据下标取值
  • toArray()
  • isEmpty()
  • size()

Arrays

Arrays这是在算法题中经常用到的一个类,他提供了很多实用方法。可以称之为强大的工具类

  • 数组排序 Arrays.sort()
    此方法可以给数组排序,一切数字类型数组,甚至char和byte型数组均可以排序
    ** 比较特殊的一点还而已数组和数字一起排序sort(int[],int,int)。实用这个方法可以解决几个简单的排序算法题,这应该说是钻了空子,找了捷径。

  • 数组复制 Arrays.copyOf()
    此方法也经常出现在数组的复制中,有些算法题会用到数组复制,使用这个方法即可

  • 数组复制从i到j Arrays.copyOfRange(int[],i,j)
    此方法也是算法题中常用

Stack 栈

基本数据结构之一,原则是先进后出,或者后进先出
栈这种数据结构或者说Stack类比较好掌握,方法不多而且很好理解
更新:后来了解到,这个类官方并不推荐使用。首先这个类是过去实现的线程安全类,现在有更好的实现方式。其次还有另一个类更符合概念,推荐直接使用LinkedList

LinkedList既可以当做栈这种数据结构来用,也可以当做队列来用。因为LinkedList是用链表来实现的。入队的操作就是把新元素直接添加到链表最后,入栈的操作是添加到链表最前头。pop()和poll()方法都是一个作用,从链表头取元素,但是由于添加时不一样就实现了两种数据结构,通用得还有peek()方法

  • pop() 弹栈
  • push() 入栈
  • peek() 查看栈顶元素并返回
  • empty() 判断是否为空

Queue 队列

Queue是个接口,所以使用起来比Stack要稍微复杂一些
队列的特点是先进先出,但是Queue实现的类中优先队列略有不同

  • LinkedList 实现了Queue接口可以直接当队列来使用
    • offer() 加入
    • poll() 移出并返回
    • peek() 查看并返回
    • element() 查看并返回
  • PriorityQueue 优先队列 树形结构
    优先队列相对于普通队列在出队的时候有区别,不是先进的先出,而是优先级高的先出
    优先级队列用于实现一些奇怪的算法,比如第k大的数。虽然算法难度上写的是简单级别,但是如果不知道这个数据结构就很难做-_-||
    • add() 就是调用了offer()方法,不知道为啥要多此一举-_-||
    • offer() 加入
    • peek() 查看并返回
    • poll() 移出并返回
    • 默认优先级为自然顺序,可通过实现Comparator接口来改
    • 实现情况为小顶堆 详细介绍点击

示例:

import java.util.Comparator;
import java.util.PriorityQueue;

public class YouXianQueue {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//比较器Comparator,把优先队列变成大顶堆
		Comparator<Integer> com=new Comparator<Integer>() {
			
			@Override
			public int compare(Integer o1, Integer o2) {
				//根据第一个值小于、等于、大于第二个值,分别返回-1,0,1
				
				//强烈注意,包装类无法直接比大小!!!!!
				
				if(o1.intValue()>o2.intValue()) return -1;
				else if(o1.intValue()<o2.intValue()) return 1;
				else return 0;
			}
		};
		
		//特记载一个简单写法,jdk1.8的新特性
		Comparator<Integer> parator = (o1,o2)->{
				return o2-o1;//三行代码完成上面内容
		};
		
		PriorityQueue<Integer> yx1=new PriorityQueue<Integer>(5,com);//添加比较器变成大顶堆
		for(int i=6;i>=0;i--) {
			yx1.offer(i);
		}
		for(int i=0;i<5;i++) {
			System.out.println(yx1.poll());//自然顺序取,每次取最小值
		}
		PriorityQueue<String> yx2=new PriorityQueue<String>(6);//6是初始堆大小,默认值为11
		yx2.offer("c");
		yx2.offer("a");
		yx2.offer("d");
		yx2.offer("f");
		for(int i=0;i<4;i++) {
			System.out.println(yx2.poll());//自然顺序取,每次取最小值
		}
	}

}

Map <K,V> 键值对结构

我常用HashMap,所以主要介绍HashMap。其他的我用熟了再补充

  • HashMap哈希键 对应值
    • put() 添加
    • get() 获取

新增知识点一
Java中对红黑树进行了实现 TreeSet

红黑树是一种具有复杂规则的自平衡二叉排序树,规则十分复杂,但是现在java中已经实现了所以直接用就行了。平衡二叉树就是使用在大量可比较类型数据的快速查找。特征是插入比较慢,但是查找比较快。

先这样吧,以后学的精深了再来改,欢迎提出问题

Python+Tableau 全流程数据分析实战:从数据清洗到商业洞察可视化 本文通过Python+Tableau完整演示电商销售数据分析流程。首先使用Python进行数据清洗(缺失值处理、异常值过滤等)和探索性分析(商品类别、时间趋势等),然后导入Tableau创建交互式可视化仪表盘。分析发现电子产品销售额最高但利润率低,美妆类利润率最优,东部地区销售表现最好。最终提出优化供应链、加强美妆推广等商业建议,展示了Python数据处理与Tableau可视化的高效配合。所有代码可直接运行,适合数据分析初学者和从业者实战参考。 阅读详情

相关推荐

我用 AI 做了个开源地图工具:从 OpenStreetMap 一键获取全国 AOI/POI 数据

本文介绍了一款免费开源的OSM数据查询与可视化工具,旨在解决Overpass QL语法晦涩、数据获取门槛高的问题。工具支持面数据(AOI)、点数据(POI)及路网三种查询模式,内置30+常用模板实现一键检索。具备高德与OSM双底图切换、坐标自动转换功能,支持GeoJSON、SHP、CSV多格式导出,同时保留自定义查询能力。作为纯HTML单文件应用,可零成本部署至GitHub Pages在线使用。该工具有效降低了地理数据获取难度,是替代商业地图API、高效提取全球开源地理信息的实用利器。

weixin_45812624的博客 585

Java 集合与数据结构

Java集合与数据结构

编程开发相关技术学习 1530

在实战中学AI-车流量统计项目-YOLOV11车辆检测-YOLOV11模型的部署

考虑实际落地中部署推理资源消耗,速度与模型精度之间的均衡,同时,车辆属于比较通用场景的目标检测,我们将YOLOV11作为最终的模型选择,目前官方开源的模型基于coco数据集训练,里面已经包含了车辆相关类别,经测试,在监控视角下效果基本可用,所以,在落地过程中,我们先用这个模型来打通部署链路,后面再逐步优化模型性能。在Nvidia的硬件下做部署,部署框架优先选择官方框架TensorRT,下面重点讲述如何用TensorRT部署YOLOV11模型。

Aleo_优快云的博客 2166

JAVA数据结构篇--14集合汇总篇

集合汇总篇

拽着尾巴的鱼儿的博客 673

国产操作系统替换方案:3个避坑指南

坑核心误区避坑核心原则关键动作坑一:选型只看信创信创目录=唯一标准兼容性优先,信创是约束三维评估(兼容性+信创+生态),分场景选型坑二:迁移只管能跑功能能跑=迁移成功性能确认+运维回归适配-压测-回归三阶段,基线对比坑三:不防二次迁移解决停服=完成任务一步到位,两级兼容信创路线优先,双轨制发布,终态规划。

weixin_43524706的博客 299

海康威视iSC平台视频流对接:RTSP、HLS、WS三种协议到底该怎么选?

本文深入分析海康威视iSC平台视频流对接中RTSP、HLS和WebSocket三种协议的优缺点,帮助开发者根据实时性、兼容性和网络环境做出最优选择。特别适合综合安防管理平台的Web视频监控系统开发,提升用户体验和系统性能。

weixin_28365523的博客 691

数据结构小结 (集合部分) (Java)

Java 集合框架 Java Collection Framework ,又被称为容器 container,是定义在 java.util 包下的一组接口 interfaces和其实现类 classes。其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索 retrieve 、 管理 manipulate ,即平时我们俗称的增删查改CRUD。List是一个接口继承。

a1806542392的博客 994

kali破解WIFI密码

今天我们来学习一下通过kali和一个好的字典来破解WIFI密码。 声明:此教程仅供学习研究使用,严禁使用此技术进行非法行为 首先我们需要一个具有监听功能的无线网卡(这里我给大家推荐:rt3070) 本章实验通过虚拟机VMware进行: 先通过services.msc来打开VMware USB Arbitration Service 插上监听网卡,连接USB到虚...

#的博客 5810

Java 数据结构集合

队列的头部是队列中时间最长的元素。为了降低这部分的开销,在 Java8 中,当链表中的元素达到了 8 个时,会将链表转换为红黑树,在这些位置进行查找的时候可以降低时间复杂度为 O(logN)。计算 key 的 hash 值,根据 hash 值找到对应数组下标: hash & (length-1)判断数组该位置处的元素是否刚好就是我们要找的,如果不是,走第三步判断该元素类型是否是 TreeNode,如果是,用红黑树的方法取数据,如果不是,走第四步遍历链表,直到找到相等(==或equals)的 key。

Artisan_w 1540

【Python爬虫】股票信息定向爬取

【Python爬虫】股票信息定向爬取:通过requests-bs4-re技术路线爬虫获取上交所和深交所所有股票的名称和交易信息

qq_39321802的博客 1503

服务部署之配置WSUS更新服务(基于Windows配置 Server 2022)

服务部署之配置WSUS更新服务(基于Windows配置 Server 2022)

2301_77192876的博客 2213

一文看懂java集合(图文详细)

一、Collection 接口的接口 对象的集合(单列集合)List 接口:元素按进入先后有序保存,有序,可重复LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全Vector 接口实现类 数组, 同步,线程安全Set 接口: 仅接收一次,无序,不可重复,并做内部排序HashSet 使用hash表(数组)存储元素LinkedHashSet 链表维护元素的插入次序。

丨康有为丨的博客 3537

一次携程酒店 phantom-token 逆向实战复盘(附python纯算)

摘要 本文介绍了通过分析携程酒店列表页面的数据接口,使用Python实现抓取的方法。主要内容包括: 目标站点为携程酒店列表页,通过开发者工具发现关键接口fetchHotelList 将浏览器请求转换为Python代码,包含请求头(headers)、Cookies和POST数据 提供完整的请求示例代码,包含日期参数、城市ID等必要信息 特别声明仅供学习交流使用,禁止商业用途 展示了如何获取酒店列表数据,包括排序筛选等参数设置 该方法可用于研究酒店数据采集,但需要注意遵守网站使用条款。

自成背后的博客 3022

java中的集合类_Java集合类——数据结构入门

前言要谈集合类,那必然绕不开数据结构。像ArrayList底层由数组实现,使用的是线性表的顺序存储结构;LinkedList使用的是线性表的链式存储结构;而HashMap则使用了散列存储结构......,等等这些,不一而足。可见集合类和数据结构之间关系之紧密。很明显,想要深入集合类的源码,必须具备一定程度的数据结构经验,这样才能起到事半功倍效果一、数据结构数据结构是相互之间存在一种或多种特定关系的...

weixin_31827003的博客 207

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JAVA中的数据结构——集合类(序):枚举器、拷贝、集合类的排序

枚举器与数据操作 1)枚举器为我们提供了访问集合的方法,而且解决了访问对象的“数据类型不确定”的难题。这是面向对象“多态”思想的应用。其实是通过抽象不同集合对象的共同代码,将相同的功能代码封装到了枚举器的这个接口里,就可以用一套代码来遍历不同类型的集合。 2)每个集合类(Vector或Hashtable等)都有一个iterator方法,各集合对象可以通过这个方法把遍历本类的控制权交给I...

weixin_30654583的博客 93

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java中的Array是工具类,常用集合类底层数据结构和HashMap和Hashtable分析。

一、Arrays是sun公司提供的一个工具类。 java.util.Arrays 该工具类主要提供排序和二分查找。 数组名.sort(); 二、常用集合类底层数据结构 ArraList底层是数组存储元素的,所以ArrayList集合适合查询,不适合频繁的随机增删元素。 LinkeList底层采用双向链表这种数据结构存储数据的,链表适合屏藩的增删元素,不适合查询操作。 Vector底层和ArrayList集合相同,但是Vector是线程安全的,效率低,所以现在很少使用。 三、HashMap和Hashtabl

苏木三少 396

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

JAVA中的集合类

JAVA中的集合类(1版)- -                                       为什么要使用集合类当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。理解集合类集合类存放于java.util包中。集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。集

王道JAVA 1669

JAVA集合类的概述

一、Java集合类概述 集合类是Java数据结构的实现。Java的集合类是java.util包中的重要内容,它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。集合类是可以往里面保存多个对象的类,存放的是对象,不同的集合类有不同的功能和特点,适合不同的场合,用以解决一些实际问题。百度百科 集合是一个容器,是一个载体,可以一次容纳多个对象。数组其实就是一个集合,集合实际上就是一个容器。 在实际

weixin_43486332的博客 597

JavaSE笔记(四)泛型与集合类

Java泛型与集合类 在前面我们学习了最重要的类和对象,了解了面向对象编程的思想,注意,非常重要,面向对象是必须要深入理解和掌握的内容,不能草草结束。在本章节,我们会继续深入了解,从我们的泛型开始,再到我们的数据结构,最后再开始我们的集合类学习。 走进泛型 为了统计学生成绩,要求设计一个Score对象,包括课程名称、课程号、课程成绩,但是成绩分为两种,一种是以优秀、良好、合格 来作为结果,还有一种就是 60.0、75.5、92.5 这样的数字分数,那么现在该如何去设计这样的一个Score类呢?现在的问题就是

qq_25928447的博客 3918

java集合是wftc_java集合类

集合类是Java数据结构的实现。Java的集合类是java.util包中的重要内容,它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。集合类是可以往里面保存多个对象的类,存放的是对象,不同的集合类有不同的功能和特点,适合不同的场合,用以解决一些实际问题。中文名Java集合类外文名Jav...

weixin_35927281的博客 183

Java 中的数据结构--简单汇总

具体如下:以及 Java 原生数组类型。

两点 2154

Java基础(八)——集合类

集合类Collection集合Collection常用方法Iterator迭代器ArrayList Collection集合 集合是存储引用类型的容器,长度可变 对于基本类型,有对应的引用类型的自动转换 集合的顶级接口为Collection接口 Collection接口的子接口(继承):List接口, Set接口 List接口的子类(实现):ArrayList类,LinkedList类 ...

HU的博客 208

尝试纯手写java集合类

尝试纯手写java集合类 之前学习java集合类,留下了很多问题,最不明白Node是什么?为什么需要使用它?现在我终于懂了! Node节点的重要性 每一个链表实际上就是有多个节点所组成,链表就好比火车,都是有一节一节的车厢组成,每一节车厢,既可以载乘客,也提示了下一节车厢和上一节车厢的信息,这就好比是Node,不仅仅是为了保存数据,也是为了保存下/上一个节点的信息,另外,保存的数据,没有办法保存...

QZP51ZX的博客 461

Java集合类的重要性

Java集合类的重要性

qq_33271461的博客 471

java 学习笔记 day11集合类和基本数据类型

java 学习笔记 集合类和基本数据类型1. 集合类1.1 ArrayList1.2 集合遍历1.3.list 集合1.4 增强for2 基本数据结构2.1堆和栈2.2数组和链表 1. 集合类 1.1 ArrayList 添加元素:add(E e ),永远返回true 删除元素:remove(),删除成功返回true,反之false 清空元素:clear() 判断集合是否为空,isempty(), 求集合长度:size() import java.util.ArrayList; import java.

KKT 130

数据结构与 Java

Java 有 8 种基本数据类型(int、char、double 等),但它们不是类,无法调用方法(如将 int 转成字符串),也不能作为泛型的类型参数(如 ArrayList<int>报错)。定义:8 种基本类型各对应一个包装类,仅 2 个特殊,其余均为 “基本类型首字母大写”:特殊:int→Integer、char→Character;普通:byte→Byte、short→Short、long→Long、float→Float、double→Double、boolean→Boolean;

2401_88453083的博客 987
下一篇: 测试文章
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值