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,一经查实,立即删除!

相关文章

心理学通识--自我成长、行动、自尊、自信、幸福

07 应用&#xff1a;用专念来战胜焦虑 通过控制肌肉的紧张与放松来获得对身体的掌控感&#xff0c;就可以从外向内&#xff0c;获得对精神的掌控感&#xff0c;从而减轻焦虑 当我从三数到一时&#xff0c;我就睁开眼睛&#xff0c;很清醒&#xff0c;很宁静 呼吸是联结身体和…

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…

React 18【实用教程】(2024最新版)

搭建开发环境 含配置&#xff0c;react-developer-tools 和 Redux DevTools 下载安装 https://blog.csdn.net/weixin_41192489/article/details/138523829 JSX 语法 https://blog.csdn.net/weixin_41192489/article/details/138649165 组件 父子组件传值、兄弟组件传值、越层组…

内网安全:IPC横向

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

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

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

猜先c++

题目描述 小 X 凭借出色的棋艺被聘请为少年宫的中国象棋老师。少年宫改造以后所有的设施都焕然一新&#xff0c;象棋教室已不再使用传统的木制棋子和棋盘了&#xff0c;小朋友们所有的操作都是在电脑上进行的&#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 - 在线…

白骑士的PyCharm教学基础篇 1.2 PyCharm基本操作

系列目录 上一篇&#xff1a;白骑士的PyCharm教学基础篇 1.1 PyCharm简介 创建与打开项目 创建项目 创建项目是使用 PyCharm 开发的第一步。以下是创建新项目的详细步骤&#xff1a; 启动 PyCharm&#xff1a; 打开 PyCharm 后&#xff0c;你会进入欢迎界面。在这里&#x…

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

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

mybatis批量插入、mybatis-plus批量插入、mybatis实现insertList、mybatis自定义实现批量插入

文章目录 一、mybatis新增批量插入1.1、引入依赖1.2、自定义通用批量插入Mapper1.3、把通用方法注册到mybatisplus注入器中1.4、实现InsertList类1.5、需要批量插入的dao层继承批量插入Mapper 二、可能遇到的问题2.1、Invalid bound statement 众所周知&#xff0c;mybatisplus…

编程界的“四大天王”

C语言、‌C、‌Java和Python是四种重要的编程语言&#xff0c;‌各有其独特的优点和适用场景。‌ 系统编程和底层开发&#xff1a;‌C语言是系统编程和底层开发的首选语言&#xff0c;‌而C也适用于系统编程&#xff0c;‌并且在高性能场合中更受青睐&#xff0c;‌因为它支持面…

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

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

代码随想录算法训练营第47天

LeetCode 647. 回文子串 链接 class Solution { public:int countSubstrings(string s) {int res 0;for(int i 0; i < s.size(); i) {res extend(s, i, i, s.size());res extend(s, i, i 1, s.size());}return res;}int extend(const string& s, int i, int j, i…

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

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

javac 生成 jar脚本命令

1 指定编译输出目录的选项 ps: java代码全路径 javac -d 是用于指定编译输出目录的选项&#xff0c;如果不执行这句&#xff0c;可能会导致修改了java代码后&#xff0c;再次生成的jar 没生效 javac -d. D:\TestAspect\app\src\main\java\com\ljl\testaspect\ui\Modify.java …

SpringBoot整合Elastic-Job 2.1.53版本任务调度,手动任务,动态添加任务演示

前提&#xff1a;zookeeper安装并成功运行 1 pom依赖 <dependency><groupId>com.github.kuhn-he</groupId><artifactId>elastic-job-lite-spring-boot-starter</artifactId><version>2.1.53</version> </dependency> 2 yml配…