Java 集合中的 Vector 类和 Stack 类

news2024/9/23 21:25:10

一.介绍

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.coloradmin.cn/o/1944405.html

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

相关文章

【HarmonyOS】关于鸿蒙消息推送的心得体会(二)

【HarmonyOS】关于鸿蒙消息推送的心得体会&#xff08;二&#xff09; 前言 推送功能的开发与传统功能开发还是有很大区别。首先最大的区别点就在于需要多部门之间的协同&#xff0c;作为鸿蒙客户端开发&#xff0c;你需要和产品&#xff0c;运营&#xff0c;以及后台开发一起…

linux 部署flask项目

linux python环境安装: https://blog.csdn.net/weixin_41934979/article/details/140528410 1.创建虚拟环境 python3.12 -m venv .venv 2.激活环境 . .venv/bin/activate 3.安装依赖包(pip3.12 install -r requirements.txt) pip3.12 install -r requirements.txt 4.测试启…

Windows安装Visual Studio2022 + QT5.15开发环境

最近&#xff0c;把系统换成了Windows11&#xff0c;想重新安装QT5.12&#xff0c;结果发现下载不了离线安装包。 最后索性安装QT5.15了&#xff0c;特此记录下。 预祝大家&#xff1a;不论是何时安装&#xff0c;都可以安装到指定版本的QT。 一、VS2022安装 VS2022官网下…

推荐一款基于 SpringBoot2 的后台管理系统脚手架,非常轻量简单(附源码)

前言 在现代软件开发中&#xff0c;后台管理系统是企业数字化转型的关键组成部分。然而&#xff0c;现有软件常常存在一些痛点&#xff0c;如复杂的权限管理、缺乏灵活的工作流配置、监控和日志功能不完善等。此外&#xff0c;许多系统study 成本高&#xff0c;依赖关系复杂&a…

Pycharm软件Win 64位安装包+详细安装步骤 百度云

如大家所掌握的&#xff0c;Pycharm是一款集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于python语言开发的工具。作为一款功能强大的IDE&#xff0c;Pycharm提供了丰富的功能和工具&#xff0c;使得python开发变得更加高效和便捷。 Pycharm常用场景如下&#x…

Unity发布XR中用于worldbuilding的全新电子书

通过身临其境的虚拟领域开始旅程&#xff0c;在维度之间传送&#xff0c;或将数字奇迹与现实世界融合——虚拟现实(VR)和混合现实(MR)的千万种可能性将邀请创作者把他们的想象力带入生活。 Unity发布的最新版综合指南将帮助有抱负的创作者和经验丰富的开发者深入研究和理解构建…

LLM模型与实践之基于 MindSpore 实现 BERT 对话情绪识别

安装环境 # 该案例在 mindnlp 0.3.1 版本完成适配&#xff0c;如果发现案例跑不通&#xff0c;可以指定mindnlp版本&#xff0c;执行!pip install mindnlp0.3.1 !pip install mindnlp 模型简介 BERT是一种由Google于2018年发布的新型语言模型&#xff0c;它是基于Transforme…

云计算核心算法(二)

目录 二、DHT算法&#xff08;一&#xff09;DHT原理介绍&#xff08;二&#xff09;Chord中DHT的具体实现&#xff08;三&#xff09;Pastry中DHT的具体实现&#xff08;四&#xff09;CAN中DHT的具体实现&#xff08;五&#xff09;Tapestry中DHT的具体实现 三、Gossip协议&a…

数据结构之栈详解

1. 栈的概念以及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈…

HDU1032——The 3n + 1 problem,HDU1033——Edge,HDU1034——Candy Sharing Game

目录 HDU1032——The 3n 1 problem 题目描述 运行代码 代码思路 HDU1033——Edge 题目描述 运行代码 代码思路 HDU1034——Candy Sharing Game 题目描述 运行代码 代码思路 HDU1032——The 3n 1 problem 题目描述 Problem - 1032 运行代码 #include <iostr…

H3CNE(路由基础、直连路由与静态路由)

目录 6.1 直连路由 6.2 静态路由理解性实验 6.2.1 配置直连路由 6.2.2 配置静态路由 6.3 路由表的参数与比较 6.3.1 优先级的比较 6.3.2 开销的比较 6.4 路由器中的等价路由、浮动路由、默认路由 6.4.1 等价路由 6.4.2 浮动路由 6.4.3 默认路由(缺省路由) 6.1 直连路…

Golang | Leetcode Golang题解之第278题第一个错误的版本

题目&#xff1a; 题解&#xff1a; func firstBadVersion(n int) int {return sort.Search(n, func(version int) bool { return isBadVersion(version) }) }

宿舍生活新升级:智能指纹锁的便捷体验(嘉立创EDA设计)

宿舍生活新升级&#xff1a;智能指纹锁的便捷体验 引言 宿舍生活总是充满挑战和乐趣&#xff0c;但有时也会因为一些小事情而变得复杂。比如&#xff0c;忘记带钥匙或者需要频繁地给室友开门。随着科技的发展&#xff0c;智能设备逐渐走进我们的生活&#xff0c;为日常带来便…

iPhone能运行Windows了 iOS正在被逼加速开放

用iPhone来运行Windows 11&#xff1f;是的&#xff0c;两个八竿子打不着的设备和系统&#xff0c;居然还有融合的一天。虽然不管从哪个方向来看&#xff0c;这都是一个很奇葩的玩法&#xff0c;但是背后却代表着iOS生态的进一步松绑&#xff0c;iOSAndroid化似乎不再仅限于功能…

【iOS】进程与多线程

目录 前言进程和线程进程和线程的区别多线程的意义时间片概念 线程的生命周期线程池的运行策略自旋锁和互斥锁自旋锁互斥锁自旋锁和互斥锁区别原子属性 iOS多线程技术方案 前言 学习此文&#xff1a;iOS多线程 在平时的iOS开发中&#xff0c;多线程是我们常会遇到的&#xff0…

EasyMedia转码rtsp视频流flv格式,hls格式,H5页面播放flv流视频

EasyMedia转码rtsp视频流flv格式&#xff0c;hls格式 H5页面播放flv流视频 文章最后有源码地址 解决海康视频播放视频流&#xff0c;先转码后自定义页面播放flv视频流 先看效果&#xff0c;1&#xff0c;EasyMedia自带的页面&#xff0c;这个页面二次开发改动页面比较麻烦 …

WARNING: The Nouveau kernel driver is currently in use by your system. 处理方法

实践系统&#xff1a; 安装NVIDIA驱动时&#xff0c;提示&#xff1a; WARNING: The Nouveau kernel driver is currently in use by your system. This driver is incompatible with the NVIDIA driver&#xff0c;and must be disabled before proceeding.警告&#xff1…

【分布式锁】Redis实现分布式锁

在分布式系统中&#xff0c;当多个服务实例&#xff08;或节点&#xff09;需要访问或修改同一份共享资源时&#xff0c;就需要使用分布式锁来确保数据的一致性和防止并发问题。这种情况下&#xff0c;传统的Java并发控制机制如ReentrantLock或synchronized就无法满足需求&…

.NET开源、简单、实用的数据库文档生成工具

前言 今天大姚给大家分享一款.NET开源&#xff08;MIT License&#xff09;、免费、简单、实用的数据库文档&#xff08;字典&#xff09;生成工具&#xff0c;该工具支持CHM、Word、Excel、PDF、Html、XML、Markdown等多文档格式的导出&#xff1a;DBCHM。 支持的数据库 Sq…

Docker+consul容器服务的更新与发现

1、Consul概述 &#xff08;1&#xff09;什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承载&#xff0c;服务之间调用单纯的通过接口访问。直到后来出现了多个节点…