Java 集合中的 Vector 类和 Stack 类

一.介绍

Java 集合框架提供了一组强大的类和接口来处理和操作对象集合。其中,Vector 和 Stack 类提供了以顺序方式存储和管理元素的基本功能。这两个类都是传统集合的一部分,但由于它们的同步性质和特定用例,它们仍然具有相关性。Vector 类实现了一个动态数组,可以根据需要增大或缩小以适应元素的添加和删除。它支持在指定位置添加、访问和删除元素等操作,使其适用于线程安全和有序遍历至关重要的场景。另一方面,Stack 类扩展了 Vector 以表示后进先出 (LIFO) 对象堆栈。它包括 push 和 pop 等其他方法以促进堆栈操作,使其成为需要深度优先搜索遍历、撤消机制或表达式评估的应用程序的理想选择。本文探讨了 Java 集合框架中 Vector 和 Stack 类的实现细节、使用场景和比较分析。通过了解它们的功能和细微差别,开发人员可以有效地利用这些类来提高 Java 应用程序的效率和功能。

二.Vector 类

Java 中的 Vector 类扩展了 AbstractList 类并实现了 List、Cloneable 和 Serializable 等关键接口。它充当与 ArrayList 类似的动态数组,但具有内置同步功能。此同步可确保一次只有一个线程可以访问 Vector 对象,从而使其对于并发操作而言是线程安全的。此特性在跨多个线程的数据完整性至关重要的场景中特别有用。通过实现同步访问,Vector 类为管理 Java 应用程序中的有序集合提供了可靠的解决方案。

1.Vector 类的构造函数是,

  • **Vector():**此默认构造函数初始化一个 Vector,其初始容量为 10 个元素。
  • **Vector(int size):**构造具有指定初始大小的 Vector。
  • **Vector(int size, int increasing):**构造具有指定初始大小的 Vector。increment 参数确定 Vector 需要扩展时其容量应增加多少。如果未指定increment,则 Vector 每次扩展时其容量都会加倍。
  • **Vector(Collection c):**构造一个包含指定 Collection c 中所有元素的 Vector。

这些构造函数为在 Java 中初始化和填充 Vector 实例提供了灵活性,可以满足不同的需求,例如特定的初始大小或从现有集合中复制元素。

2.Vector 类的方法

  • **addElement(Object element):**将指定元素附加到 Vector 的末尾,并将其大小增加一。
  • **capacity():**返回 Vector 的当前容量。
  • **contains(Object element):**如果 Vector 包含指定元素,则返回 true。
  • **containsAll(Collection c):**如果 Vector 包含指定 Collection c 中的所有元素,则返回 true。
  • **elementAt(int index):**返回 Vector 中指定索引处的元素。
  • **EnsureCapacity(int minimumCapacity):**确保 Vector 至少具有指定的最小容量。如果 Vector 的当前容量小于最小容量,则增加其容量。
  • **get(int index):**返回 Vector 中指定索引处的元素。
  • **setElementAt(Object element, int index):**将 Vector 中指定索引处的元素设置为给定元素。
  • **setSize(int newSize):**将 Vector 的大小设置为指定的 newSize。如果 newSize 大于当前大小,则 Vector 将扩展并附加空元素;如果 newSize 小于当前大小,则索引 newSize 及以上位置的所有组件都将被丢弃。
  • **size():**返回 Vector 的当前大小。
  • **toString():**返回 Vector 的字符串表示形式,按顺序包含其元素。

这些方法为操作和查询 Java 中的 Vector 对象提供了基本功能,促进了高效的数据管理和检索操作。

3.源代码

import java.util.Iterator;
import java.util.Vector;
public class VectorExample {public static void main(String[] args) {Vector<String> fruits = new Vector<>();fruits.add("Apple");fruits.add("Orange");fruits.add("Grapes");fruits.add("Pine");Iterator<String> it = fruits.iterator();while (it.hasNext()) {System.out.println(it.next());}}
}

4.输出

此代码演示了 Java 中 Vector 类和 Iterator 接口的基本用法。它初始化 Vector、向其中添加元素、检索 Iterator 以遍历 Vector,并使用 Iterator 按顺序打印每个元素。此方法展示了如何在 Java 中有效地管理和遍历集合。

三.Stack 类

Java 中的 Stack 类扩展了 Vector 类,继承了其用于管理动态数组的方法。此外,Stack 类还引入了 push、pop、peek 和 search 等专用方法。这些方法支持特定于堆栈的操作:push 将元素添加到堆栈顶部,pop 移除并返回顶部元素,peek 返回顶部元素而不移除它,search 确定堆栈内指定对象的位置。

1.Stack 类的构造函数可以表示为,

Stack()

上述构造函数用于创建一个空堆栈。Stack 类使用先进后出 (FILO) 机制。

2.Stack 类的方法

  • **empty():**如果 Stack 为空,则返回 true。
  • **peek():**返回 Stack 顶部的元素而不将其删除。
  • **pop():**移除并返回 Stack 顶部的元素。
  • **push():**将一个项目添加到 Stack 的顶部。

这些方法是操作 Java 中 Stack 数据结构的基础,可以方便地执行诸如检查堆栈是否为空、在不改变堆栈的情况下访问顶部元素、删除顶部元素以及向堆栈顶部添加新元素等操作。

考虑一个将字符串值添加到堆栈的程序。

3.源代码

import java.util.*;
public class StackExample {public static void main(String[] args) {Stack<String> st = new Stack<>();st.push("Java");st.push("Programming");st.push("Language");st.push("Ashish Bhatnagar");System.out.println("The element in the Stack: " + st);System.out.println("The element at the top: " + st.peek());System.out.println("The element popped out of the Stack: " + st.pop());System.out.println("The element in the Stack after popping an element: " + st);System.out.println("The Result of Searching: " + st.search("a b"));}
}

4.输出

此代码演示了 Java 中 Stack 类的基本操作。它初始化 Stack、将元素推送到 Stack、打印 Stack 的内容、执行“peek-and-pop”操作以从 Stack 顶部检索和移除元素,最后演示了在 Stack 中搜索元素。此示例说明了如何在 Java 编程中使用 Stack 数据结构进行 LIFO(后进先出)操作。

四.概括

Vector 类和 Stack 类是 Java 集合框架的基本组件,分别为管理有序集合和基于堆栈的数据结构提供了强大的解决方案。Vector 类扩展了 AbstractList 并实现了 List、Cloneable 和 Serializable 接口,提供了动态数组功能,并内置了同步功能以确保线程安全。它支持添加、访问和修改元素等操作,适合需要同步访问和有序遍历的场景。另一方面,Stack 类扩展了 Vector 并引入了特定于堆栈操作的方法,例如推送(添加元素)、弹出(删除和返回元素)、查看(查看顶部元素而不删除)和搜索(查找元素)。这些类是 Java 编程中的基础,用于高效数据管理和实现依赖于顺序存储和后进先出 (LIFO) 行为的算法。

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

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

相关文章

DDoS 究竟在攻击什么?

分布式拒绝服务&#xff08;DDoS&#xff09;攻击是一种常见的网络攻击形式&#xff0c;攻击者通过向目标服务端发送大量的请求&#xff0c;使目标服务端无法进行网络连接&#xff0c;无法正常提供服务。 DDoS 攻击通常是由大量的分布在全球各地的 “僵尸” 计算机&#xff08…

STM32F401VET6 PROTEUS8 ILI9341 驱动显示及仿真

stm32cubemx新建工程代码&#xff0c;并生成工程 设置gpio 设置SPI 其他的参考stm32默认设置 然后编辑驱动代码 ili9341.h #ifndef ILI9341_H #define ILI9341_H#include <stdbool.h> #include <stdint.h>#include "glcdfont.h" #include "stm32…

物联网Java项目, 2万多TPS如何处理?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「物联网Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;2W个采集点&#xff0…

内网安全:IPC横向

IPC计划任务横向 IPC配合系统服务横向 前言&#xff1a; IPC是为了实现进程之间的通信而开放的管道。IPC可以通过验证用户名和密码来获取相应的权限。通过IPC可以与目标机器建立连接。 IPC计划任务横向 本次目标&#xff1a;通过机器192.168.11.40&#xff0c;横向控制机器192…

学生信息管理系统详细设计文档

一、设计概述 学生信息管理系统是一个用于管理学生信息的软件系统&#xff0c;旨在提高学校对学生信息的管理效率。本系统主要包括学生信息管理、课程信息管理、成绩信息管理、班级信息管理等功能模块。详细设计阶段的目标是确定各个模块的实现算法&#xff0c;并精确地表达这…

图形化开发安卓程序-App Inventor环境搭建一

图形化开发安卓程序-App Inventor环境搭建一 1.概述 现在不用专业的开发技能并可以实现自己DIY一个程序的想法&#xff0c;将天马行空的创意编程现实&#xff0c;配合硬件我们也可以称为当下最流行的AI大师、物联网大师。 2.环境安装 appInvenor开发不依赖本地计算机&#…

数据结构(5.3_1)——二叉树的先中后序遍历

先序遍历——根左右——前缀表达式 中序遍历——左根右——中缀表达式 后序遍历——左右根——后缀表达式 二叉树的遍历(手算) 先序遍历代码 struct ElemType {int value; }; //二叉树的结点(链式存储) typedef struct BiTNode {ElemType data;//数据域struct BiTNode *lchil…

解决kkfileview 使用https预览问题记录

场景&#xff1a;项目使用了开源的kkfileview进行文件在线预览&#xff0c;部署方式使用的是docker&#xff0c;使用IP进行访问&#xff0c;但是http协议直接访问有漏洞告警&#xff0c;现在需要调整为https&#xff0c;且仍然需要使用IP访问。 kkfileview官网kkFileView - 在线…

AI学习记录 - 规范化输出对接现有系统的实例

假设我们有一个学生管理系统&#xff0c;通过prompt提示&#xff0c;格式化输出然后对接现有系统&#xff0c;也是通过react实现&#xff0c;因为这只是一个知识分享&#xff0c;没弄太复杂&#xff08;使用react实现&#xff09;。 学生管理系统 1、设计好prompt getMemory()…

Python对某音乐论坛进行简单的采集

今天简单的用Python来采集一下某论坛的歌曲 环境使用 Python 3.10 Pycharm 模块使用 requests --> 发送请求 pip install requests execjs --> pip install execjs re 正则源码和视频讲解都打包好了&#xff0c;文末名片自取 基本流程 一、数据来源分析 1.明…

手写RPC-令牌桶限流算法实现,以及常见限流算法

为什么需要服务限流、降级 分布式架构下&#xff0c;不同服务之间频繁调用&#xff0c;对于某个具体的服务而言&#xff0c;可能会面临高并发场景。在这样的情况下&#xff0c;提供服务的每个服务节点就都可能由于访问量过大而引起一系列问题&#xff0c;比如业务处理耗时过长、…

VMware三种网络模式---巨细

文章目录 目录 ‘一.网络模式概述 二.桥接模式 二.NAT模式 三.仅主机模式 四.案例演示 防火墙配置&#xff1a; 虚拟电脑配置 前言 本文主要介绍VMware的三种网络模式 ‘一.网络模式概述 VMware中分为三种网络模式&#xff1a; 桥接模式&#xff1a;默认与宿主机VMnet0绑…

基于Java中的SSM框架实现商店积分管理系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现商店积分管理系统演示 摘要 随着时代的发展&#xff0c;信息化的管理手段已被普遍应用于企业的日常运作中。在当今竞争激烈的市场中&#xff0c;消费者的需求量日益增长&#xff0c;而商品信息的管理也变得越来越复杂&#xff0c;因此&#xff0c;实施…

14. Hibernate 一对多双向关联映射

1. 前言 本节课程和大家一起聊聊一对多关联映射。通过本节课程&#xff0c;你将了解到&#xff1a; 如何实现一对多关联映射&#xff1b; 如何实现双向一对多关联映射&#xff1b; 关联映射中的级联操作。 2. 一对多关联映射 关系型数据库中表与表中的数据存在一对多&…

深入理解Linux网络(八):内核如何发送网络包

深入理解Linux网络&#xff08;八&#xff09;&#xff1a;内核如何发送网络包 一、总览二、网卡启动准备三、ACCEPT 创建新 SOCKET四、开始发送数据send 系统调⽤实现传输层处理传输层拷贝传输层发送 网络层发送原理邻居⼦系统网络设备子系统软中断调度igb网卡驱动发送发送完成…

Python 实现PDF和TIFF图像之间的相互转换

PDF是数据文档管理领域常用格式之一&#xff0c;主要用于存储和共享包含文本、图像、表格、链接等的复杂文档。而TIFF&#xff08;Tagged Image File Format&#xff09;常见于图像处理领域&#xff0c;主要用于高质量的图像文件存储。 在实际应用中&#xff0c;我们可能有时需…

wefwefwe

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

在 ArkTS 中集成 C 语言模块来管理文件描述符

文章目录 前言ArkTS模块C语言模块C模块代码 总结 前言 在现代开发中&#xff0c;尤其是在处理文件操作时&#xff0c;使用文件描述符&#xff08;fd&#xff09;是一种常见的方法。ArkTS提供了一种强大的方式来与底层C代码交互&#xff0c;使我们能够利用C语言的性能优势来管理…

dsa加训

refs: OI Wiki - OI Wiki (oi-wiki.org) 1. 枚举 POJ 2811 熄灯问题 refs : OpenJudge - 2811:熄灯问题 如果要枚举每个灯开或者不开的情况&#xff0c;总计2^30种情况&#xff0c;显然T。 不过我们可以发现&#xff1a;若第i行的某个灯亮了&#xff0c;那么有且仅有第i行和第…

Win10使用VS Code远程连接Ubuntu服务器时遇到SSH公钥错误的解决方案

在使用Windows 10上的Visual Studio Code&#xff08;VS Code&#xff09;远程连接Ubuntu 20.04服务器时&#xff0c;遇到了以下错误&#xff1a; 错误的原因 这个错误消息表明&#xff0c;SSH 客户端检测到远程主机的 ECDSA 公钥已更改。可能是由于以下原因之一&#xff1a…