Java基础--数据结构

news2024/11/25 12:34:56

阅读目录

目录

数据结构

Java 集合框架

List

Set

Map


数据结构

Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:
枚举(Enumeration)、位集合(BitSet)、向量(Vector)、栈(Stack)、字典(Dictionary)、哈希表(Hashtable)、属性(Properties)
以上这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collection)

回到目录

Java 集合框架


Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。
Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。

List、Map、Set的区别与联系

结构特点

ListSetMap
存储单列数据存储单列数据存储键值对
有顺序的,并且值允许重复无顺序的,并且不允许重复无序的,它的键是不允许重复的,但是值是允许重复的

实现类
List接口:

LinkedListArrayListVector
基于链表实现基于数组实现基于数组实现
链表内存是散列的,增删快,查找慢效率高,增删慢,查找快效率低,增删慢,查找慢
非线程安全非线程安全线程安全

Set接口:

HashSetLinkedHashSetTreeSet
基于HashMap 实现继承于 HashSet、基于LinkedHashMap实现
重写 equals()和 hash Code()方法
允许有 null 值
非线程安全非线程安全非线程安全

Map接口:

HashMapHashTableLinkedHashMapSortMap
支持 null 值和 null 键不支持 null 值和 null 键HashMap 的一个子类接口 TreeMap
高效低效保存了记录的插入顺序能够把它保存的记录根据键排序
非线程安全线程安全非线程安全非线程安全

回到目录

List

ArrayList

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

初始化

 
import java.util.ArrayList; // 引入 ArrayList 类
ArrayList<E> objectName =new ArrayList<>();  // 初始化

常用方法

方法描述
add(int index,E element)将元素插入到指定位置的 arraylist 中
clear()删除 arraylist 中的所有元素
clone()复制一份 arraylist
contains(Object obj)判断元素是否在 arraylist
get(int index)通过索引值获取 arraylist 中的元素
set(int index, E element)替换 arraylist 中指定索引的元素
indexOf(Object obj)返回 arraylist 中元素的索引值
remove(Object obj)删除 arraylist 里的单个元素
size()返回 arraylist 里元素数量
isEmpty()判断 arraylist 是否为空
subList(int fromIndex, int toIndex)截取部分 arraylist 的元素
sort(Comparator c)根据指定的顺序对 arraylist 元素进行排序
toArray(T[] arr【可选参数】)将 arraylist 转换为数组【无参数返回类型为Object】
toString()将 arraylist 转换为字符串
lastIndexOf()返回指定元素在 arraylist 中最后一次出现的位置
trimToSize()将 arraylist 中的容量调整为数组中的元素个数
removeRange(int fromIndex, int toIndex)删除 arraylist 中指定索引之间存在的元素

LinkedList

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。
链表可分为单向链表和双向链表。

继承与实现:

继承了 AbstractSequentialList 类。
实现了 Queue 接口,可作为队列使用。
实现了 List 接口,可进行列表的相关操作。
实现了 Deque 接口,可作为队列使用。
实现了 Cloneable 接口,可实现克隆。
实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。

常用方法

方法描述
boolean add(E e)链表末尾添加元素,返回是否成功,成功为 true,失败为 false。
void add(int index, E element)向指定位置插入元素。
void addFirst(E e)元素添加到头部。
void addLast(E e)元素添加到尾部。
boolean offer(E e)向链表末尾添加元素,返回是否成功,成功为 true,失败为 false。
boolean offerFirst(E e)头部插入元素,返回是否成功,成功为 true,失败为 false。
boolean offerLast(E e)尾部插入元素,返回是否成功,成功为 true,失败为 false。
void clear()清空链表。
E removeFirst()删除并返回第一个元素。
E removeLast()删除并返回最后一个元素。
boolean remove(Object o)删除某一元素,返回是否成功,成功为 true,失败为 false。
E remove(int index)删除指定位置的元素。
E poll()删除并返回第一个元素。
E remove()删除并返回第一个元素。
boolean contains(Object o)判断是否含有某一元素。
E get(int index)返回指定位置的元素。
E getFirst()返回第一个元素。
E getLast()返回最后一个元素。
int indexOf(Object o)查找指定元素从前往后第一次出现的索引。
int lastIndexOf(Object o)查找指定元素最后一次出现的索引。
E peek()返回第一个元素。
E element()返回第一个元素。
E peekFirst()返回头部元素。
E peekLast()返回尾部元素。
E set(int index, E element)设置指定位置的元素。
int size()返回链表元素个数。
Object[] toArray()返回一个由链表元素组成的数组。
T[] toArray(T[] a)返回一个由链表元素转换类型而成的数组。

Java Collections框架的Stack类提供了堆栈的实现。但是,建议Deque用作堆栈而不是Stack类。这是因为Stack的方法是同步的。
以下是Deque接口提供的用于实现堆栈和队列的方法:
栈(后进先出):

 
Deque que = new LinkedList();
que.push(e);//在双端队列的开头添加元素
que.pop();//弹出栈顶
que.peek();//查看栈顶

队列(先进先出)

 
add(E);//boolean 在队尾添加元素,添加成功返回true,如果队列已满无法添加则抛出异常。
offer(E);//boolean 在队尾添加元素,添加成功返回true,如果队列已满无法添加则返回false。
remove();//E 删除队头元素,并返回删除的元素,如果队列为null,抛出异常。
poll();//E 删除队头元素,并返回删除的元素,如果队列为null,返回null。
element();//E 获取队头元素,如果队列为null将抛出异常。
peek();//E 获取队头元素,如果队列为null将返回null。

回到目录

Set

HashSet

HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
创建对象:

 
HashSet<String> sites = new HashSet<String>();

常用方法

方法描述
add(E)添加元素
contains(E)判断元素是否存在
remove()删除元素;删除成功返回 true,否则为 false
size()计算大小;

LinkedHashSet

TreeSet

回到目录

Map

HashMap

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

 
HashMap<Integer, String> Sites = new HashMap<Integer, String>();

常用方法

方法描述
put(key,E)添加元素
get(key)访问元素
remove(key)删除元素
clear()删除所有键值对
size()计算大小
isEmpty()判断 hashMap 是否为空
containsKey(Object key)检查 hashMap 中是否存在指定的 key 对应的映射关系
containsValue(Object value)检查 hashMap 中是否存在指定的 value 对应的映射关系。
replace(K key, V newValue)替换 hashMap 中是指定的 key 对应的 value
getOrDefault(Object key, V defaultValue)获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
values()返回 hashMap 中存在的所有 value 值。

LinkedHashMap

 

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

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

相关文章

进阶C语言:程序环境和预处理

有关C语言的知识马上就要结束了&#xff0c;在学完了前面的基础之上我们就来深究一下程序底层的逻辑&#xff0c;关于程序的预处理编译指令&#xff0c;话不多说&#xff0c;我们直接开始&#xff1a; 目录 1.程序的翻译环境和执行环境 2. 详解编译链接 2.1翻译环境 2.2编译…

IT培训有靠谱的机构吗,长什么样的?

关于IT培训的问题&#xff0c;网上有一大波劝退的声音&#xff1a;现在的IT越来越卷&#xff0c;高校计算机专业毕业生每年那么多&#xff0c;作为小白转行的你竞争力又在哪里呢&#xff1f;而且去年互联网大厂那么多裁员&#xff0c;还有大幅度降薪等等&#xff0c;IT行业已经…

通达信破底翻选股公式,用缠论底分型进行优化

上次在写《通达信破底翻形态选股公式&#xff0c;选出破底之后再翻回的股票》这篇文章时&#xff0c;编写破底翻选股公式就考虑使用缠论底分型&#xff0c;但是底分型的包含关系较为复杂&#xff0c;不容易处理&#xff0c;只能暂时搁置&#xff0c;采用了一种简单的方式&#…

【PyTorch】第九节:Softmax 函数与交叉熵函数

作者&#x1f575;️‍♂️&#xff1a;让机器理解语言か 专栏&#x1f387;&#xff1a;PyTorch 描述&#x1f3a8;&#xff1a;PyTorch 是一个基于 Torch 的 Python 开源机器学习库。 寄语&#x1f493;&#xff1a;&#x1f43e;没有白走的路&#xff0c;每一步都算数&#…

低延迟流式语音识别技术在人机语音交互场景中的实践

美团语音交互部针对交互场景下的低延迟语音识别需求&#xff0c;提出了一种全新的低出字延迟流式语音识别方案。本方法将降低延迟问题转换成一个知识蒸馏过程&#xff0c;极大地简化了延迟优化的难度&#xff0c;仅通过一个正则项损失函数就使得模型在训练过程中自动降低出字延…

靶机精讲之Holynix

找不到ip 就设置两个网络适配器 再添加一个NAT 主机发现 nmap扫描 端口扫描 UDP扫描 服务扫描 脚本扫描 拒绝服务攻击 sql注入 枚举 web渗透 sql注入 证明有注入 sql注入语句 语句 ‘ or 11 --&#xff08;空格&#xff09; 目录结构像有文件包含 有报错但无法利用 调用系统…

从零开始学架构-计算高性能

一、概述 高性能是每个程序员的追求&#xff0c;无论做一个系统、还是写一组代码&#xff0c;都希望能够达到高性能的效果。而高性能又是最复杂的一环&#xff0c;磁盘、操作系统、CPU、内存、缓存、网络、编程语言、数据库、架构等&#xff0c;每个都可能影响系统的高性能&…

ChatGPT API接口使用+fine tune微调+prompt介绍

目录1 接口调用1.1 生成key1.2 接口功能1.2.1 图片生成 (image generation)1.2.2 对话(chat)1.2.3 中文纠错 (Chinese Spelling Correct)1.2.4 关键词提取 &#xff08;keyword extract)1.2.5 抽取文本向量 (Embedding)1.2.6 微调 (fine tune)2 如何写好prompt2.1分类任务2.2 归…

工业智能网关应用场景:高层楼宇智慧消防解决方案

随着城市化建设的飞速发展&#xff0c;人员聚集与土地资源稀缺的矛盾越来越明显。为了让有限的空间满足更多人的居住需求&#xff0c;高层楼宇越来越多&#xff0c;对于安全消防形成更大的挑战。 基于物联网和云计算平台的智慧消防在消防管理、火灾报警和实时监管方面发挥越来…

java内部类入门(接口)

我有一个玩具狗&#xff0c;有一个接口用于启动它&#xff0c;按照传统方法就是写一个类并实现该接口&#xff0c;且该类只使用一次&#xff08;在启动时使用&#xff0c;后面再不使用&#xff09; 但是如果我有一堆玩具&#xff0c;我每个玩具都要去写一个类来实现start这个接…

GPT-3.5还没研究明白,GPT-4又来了,chatGPT会进化成什么样?

基于GPT-3.5的chatGPT热度才稍稍减退没多久&#xff0c;GPT-4又来了&#xff0c;文新一言的发布会也槽点满满&#xff0c;差距似乎越来越大了。 chatGPT到底厉害在哪&#xff1f;为什么突然就爆火了呢&#xff1f; 它的爆火&#xff0c;一方面&#xff0c;和它的出现形态有关…

代码随想录第18天 | 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差 var getMinimumDifference function (root) {//中序遍历法&#xff1a;左中右let res []if (!root) return res;const st [root] //栈&#xff0c;pop(),push()while (st.length) {let x st.pop()if (!x) {res.push(st.pop().val)continue}if (…

Linux环境下搭建composer私服及memory_limit问题

Composer是 PHP项目中用来管理依赖&#xff08;dependency&#xff09;关系的工具&#xff0c;允许声明项目所依赖的代码库 &#xff0c;然后在项目的某个目录中(默认是vendor目录) 中安装相关的依赖包。 在介绍如何安装私服之前&#xff0c;我们先熟悉下 composer 相关 compo…

对话框与子窗口控件(写给大忙人看的快速复习掌握)

对话框与子窗口控件&#xff08;写给大忙人看的快速复习掌握&#xff09;1、对话框的概念2、控件的概念我更喜欢称控件为预定义的窗口类3、我们一步一步写代码熟悉常用的预定义的窗口类3.1 什么叫模板呢&#xff1f;3.2 什么是资源文件4、消息处理函数&#xff08;有这么几个消…

护眼灯哪些牌子好?2023护眼灯品牌推荐

护眼灯就是保护眼睛的&#xff0c;很多人长时间工作和学习&#xff0c;主要还是光的刺激和错误的坐姿&#xff0c;会引起眼睛的近视&#xff0c;导致视觉疲劳的主要原因就是灯光的频闪&#xff0c;而护眼灯就能很好减少频闪。 特别是青少年们的视力发育为成熟&#xff0c;视力…

使用Sentieon加速甲基化WGBS数据分析

全基因组甲基化测序(WGBS)是一种研究DNA甲基化的方法&#xff0c;以全面了解在基因组水平上的表观遗传变化。在进行WGBS数据分析时&#xff0c;通常需要使用专门的比对工具&#xff0c;因为这些工具需要能够处理亚硫酸盐转化后的数据。 以下是四个不同的WGBS比对分析流程&…

ADIDAS阿里纳斯励志广告语

系列文章目录 精选优美英文短文1——Dear Basketball&#xff08;亲爱的篮球&#xff09;精选优美英文短文2——Here’s to the Crazy Ones&#xff08;致疯狂的人&#xff09;“我祝你不幸并痛苦”——约翰罗伯茨毕业致辞“亲爱的波特兰——CJ麦科勒姆告别信” Hi, I’m Gilb…

七、Django进阶:第三方库Django-extensions的开发使用技巧详解(附源码)

Django-extensions是 Django 的扩展应用&#xff0c;给django开发者提供了许多便捷的扩展工具(extensions)&#xff0c;它提供了许多有用的工具和命令行工具&#xff0c;帮助 Django 开发者更高效地进行开发和调试。它的作用包括&#xff1a; - 提供了更多的Django命令&#x…

循环依赖详解及解决方案

介绍 上图就是循环依赖的三种情况,虽然方式不同,但是循环依赖的本质是一样的,就A的完整创建要依赖与B,B的完整创建要依赖于A,相互依赖导致没办法完整创建造成失败. 循环依赖代码演示 public class Demo {public static void main(String[] args) {new Demo1();} }class Demo1…

电子信息工程有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是电子信息工程领域的一些SCI期刊推荐&#xff1a; IEEE Transactions on Information Theory&#xff1a; 该期刊由IEEE出版&#xff0c;专注于信息理论领域的研究&#xff0c;包括编码理论、信道编码、信息传输、信息论应用等方面的研究。 IEEE Transactions on Signal…