2024年150道高频Java面试题(二十二)
43. ArrayList 和 Vector 的区别是什么?
ArrayList 和 Vector 是 Java 中用于存储对象的两种不同类型的动态数组。它们都实现了 List 接口,但存在一些重要的区别:
- 同步性:
ArrayList是不同步的,意味着它不是线程安全的。在进行迭代或者修改操作时,如果有多个线程访问同一个ArrayList实例,必须外部同步。Vector是同步的,它的所有公共方法都是同步方法,因此是线程安全的。任何时刻只有一个线程能够访问Vector的任何同步方法。
- 性能:
- 由于
ArrayList不需要考虑线程同步的问题,因此在单线程环境下它比Vector更快。 Vector的每个操作都可能涉及到锁定,这会在多线程环境中导致性能开销。
- 由于
- 容量增长:
ArrayList和Vector都会根据需要自动增长其内部数组的大小,但增长方式不同。ArrayList的默认增长策略是增长当前容量的50%,而Vector默认增长一倍。但是,Vector允许通过构造函数设置增长系数,而ArrayList不支持。
- 迭代器:
ArrayList和Vector都支持快速失败的迭代器,但这些迭代器在不同的列表结构上行为可能不同。如果在迭代过程中列表结构被修改(不是通过迭代器自己的remove方法),ArrayList的迭代器会立即抛出ConcurrentModificationException,而Vector的迭代器由于同步可能会在某个不确定的时间抛出异常。
- 遗留问题:
Vector是 Java 早期版本中的类,那时候集合框架还没有出现。随着 Java Collections Framework 的引入,ArrayList被推荐作为Vector的替代品,因为它提供了更灵活的API和更好的性能。
以下是 ArrayList 和 Vector 的简单代码示例:
import java.util.ArrayList;
import java.util.Vector;public class ListExample {public static void main(String[] args) {// ArrayList 示例ArrayList<String> arrayList = new ArrayList<>();arrayList.add("Element 1");arrayList.add("Element 2");// ... 在这里不会有线程安全问题// Vector 示例Vector<String> vector = new Vector<>();vector.add("Element 1");vector.add("Element 2");// ... 在这里由于同步,多线程操作更安全}
}
总的来说,如果没有多线程的需求,推荐使用 ArrayList,因为它更简单、更快。如果需要线程安全,可以考虑使用 Vector 或者通过 Collections.synchronizedList() 来包装一个 ArrayList。
44. Array 和 ArrayList 有何区别?
Array(数组)和 ArrayList 是Java编程语言中两种不同的数据结构,用于存储元素集合,它们之间有以下主要区别:
- 类型:
- Array 可以是基本数据类型数组,也可以是对象数组,但一旦创建,其类型固定,长度也固定。
- ArrayList 是泛型类,属于集合框架的一部分,只能存储对象,不能存储基本数据类型,但可以存储任何类型的对象,因为使用了泛型。
- 大小可变性:
- Array 的大小在创建时就已经确定,之后不能改变。
- ArrayList 是动态的,可以根据需要自动调整其内部数组的大小。
- 性能:
- Array 由于其固定大小,通常在访问元素时性能稍快。
- ArrayList 由于涉及到动态扩容,在添加或删除元素时可能需要复制数组,性能相对较慢。
- 灵活性:
- Array 在处理大量数据时效率高,且占用内存固定,但是不够灵活。
- ArrayList 在处理小到中等数量的数据时非常灵活,因为它可以自动调整大小。
- 接口和方法:
- Array 是Java语言的内建数据结构,它没有提供额外的操作方法,仅提供基本的访问和修改元素的方法。
- ArrayList 实现了 List 接口,拥有丰富的接口方法,如 add(), remove(), set(), contains(), size(), isEmpty(), clear() 等。
- 迭代方式:
- Array 可以通过传统的for循环或者增强型for循环来迭代。
- ArrayList 可以通过增强型for循环、普通for循环、迭代器(Iterator)等多种方式迭代。
代码示例:
// 使用Array
int[] intArray = new int[10]; // 创建一个长度为10的整数数组
for (int i = 0; i < intArray.length; i++) {intArray[i] = i;
}// 使用ArrayList
ArrayList<Integer> integerArrayList = new ArrayList<>();
for (int i = 0; i < 10; i++) {integerArrayList.add(i);
}// ArrayList的迭代
for (Integer number : integerArrayList) {System.out.println(number);
}// Array和ArrayList的混用
Integer[] integerArray = integerArrayList.toArray(new Integer[0]); // 将ArrayList转换为Array
ArrayList<Integer> newArrayList = new ArrayList<>(Arrays.asList(intArray)); // 注意这里是将数组内容作为List初始化
总结来说,Array适用于已知大小和类型的场景,而ArrayList适用于元素数量不固定或需要频繁添加/删除元素的场景。
领【150 道精选 Java 高频面试题】请go公众号:码路向前 。
相关文章:
2024年150道高频Java面试题(二十二)
43. ArrayList 和 Vector 的区别是什么? ArrayList 和 Vector 是 Java 中用于存储对象的两种不同类型的动态数组。它们都实现了 List 接口,但存在一些重要的区别: 同步性: ArrayList 是不同步的,意味着它不是线程安全…...
如何使用校园网——Win10笔记本,台式机互开热点
当我们使用校园网的时候,往往只能连接一个电脑端,但是又想两个机子同时连接WIFI怎么办呢? 当然,前提条件是你先得其中一台电脑有网络哈 1、打开想开共享热点的电脑的设置 A、点击WIN,再点击设置 2、点击网络和Inte…...
c#:简洁实现if-else语句
c#:简洁实现if-else语句 在C#中,可以使用三元运算符(? :)来简洁地实现if-else语句。其语法格式为: 条件表达式 ? 表达式1 : 表达式2 例如:当条件表达式为真时,返回表达式1的值,否…...
金融贷款批准预测项目
注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 在金融服务行业,贷款审批是一项关键任务,它不仅关系到资金的安全,还直接影响到金融机构的运营效率和风险管理…...
FR中隐藏系统管理--用户管理中 表格中每条数据中的编辑按钮,删除按钮
比如隐藏删除按钮: var userTableTools BI.Constants.getConstant("dec.constant.user.table.tools")for(var key in userTableTools){if(key "delete"){var deleteItem userTableTools["delete"]deleteItem.invisible true;}}...
函数重载和引用【C++】
文章目录 函数重载什么是函数重载?函数重载的作用使用函数重载的注意点为什么C可以函数重载,C语言不行? 引用什么是引用?引用的语法引用的特点引用的使用场景引用的底层实现传参时传引用和传值的效率引用和指针的区别 函数重载 什…...
rust-tokio发布考古
源头: Carl Lerche Aug 4, 2016 I’m very excited to announce a project that has been a long time in the making. 我很兴奋地宣布一个酝酿已久的项目。 Tokio is a network application framework for rapid development and highly scalable deployments…...
3D医疗图像配准 | 基于Vision-Transformer+Pytorch实现的3D医疗图像配准算法
项目应用场景 面向医疗图像配准场景,项目采用 Pytorch ViT 来实现,形态为 3D 医疗图像的配准。 项目效果 项目细节 > 具体参见项目 README.md (1) 模型架构 (2) Vision Transformer 架构 (3) 量化结果分析 项目获取 https://download.csdn.net/down…...
设计模式(18):状态模式
核心 用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题 结构 环境类(Context): 环境类中维护一个State对象,它定义了当前的状态,并委托当前状态处理一些请求; 抽象状态类(State): 用于封装对象的一个特定状态所对应的行为&a…...
如果用大模型考公,kimi、通义千问谁能考高分?
都说大模型要超越人类了,今天就试试让kimi和通义千问做公务员考试题目,谁能考高分? 测评结果再次让人震惊! 问题提干:大小两种规格的盒装鸡蛋,大盒装23个,小盒装16个,采购员小王买了…...
如何在Java中创建对象输入流
在Java中创建对象输入流(ObjectInputStream)通常涉及以下步骤: 获取源输入流:首先,你需要有一个源输入流,它可能来自文件、网络连接或其他任何可以提供字节序列的源。 包装源输入流:接着&#…...
Vue 打包或运行时报错Error: error:0308010C
问题描述: 报错:Error: error:0308010C 报错原因: 主要是因为 nodeJs V17 版本发布了 OpenSSL3.0 对算法和秘钥大小增加了更为严格的限制,nodeJs v17 之前版本没影响,但 V17 和之后版本会出现这个错误…...
222222222222222222222222
欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…...
微信小程序 电影院售票选座票务系统5w7l6
uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 框架支持:springboot/Ssm/thinkphp/django/flask/express均支持 前端开发:vue.js 可选语言:pythonjavanode.jsphp均支持 运行软件…...
C#:用定时器监控定时器,实现中止定时器正在执行的任务,并重启
Windows服务中使用的比较多的是定时器,但这种定时任务有个比较大的毛病:有时会莫名其妙地停止执行(长时间执行不完,假死),必须得手工重启Windows服务才能恢复正常。这个就太麻烦了。 有没有办法来实现定时…...
计算机组成原理 — CPU 的结构和功能
CPU 的结构和功能 CPU 的结构和功能CPU 概述控制器概述CPU 框架图CPU 寄存器控制单元 CU 指令周期概述指令周期的数据流 指令流水概述指令流水的原理影响流水线性能的因素流水线的性能流水线的多发技术流水线结构 中断系统概述中断请求标记和中断判优逻辑中断请求标记 INTR中断…...
npm包安装与管理:深入解析命令行工具的全方位操作指南,涵盖脚本执行与包发布流程
npm,全称为Node Package Manager,是专为JavaScript生态系统设计的软件包管理系统,尤其与Node.js平台紧密关联。作为Node.js的默认包管理工具,npm为开发者提供了便捷的方式来安装、共享、分发和管理代码模块。 npm作为JavaScript世…...
序列化结构(protobuf)实现一个TCP服务器(C++)
Protocol Buffers(protobuf)是一种由Google开发的用于序列化结构化数据的方法,通常用于在不同应用程序之间进行数据交换或存储数据。它是一种语言无关、平台无关、可扩展的机制,可以用于各种编程语言和环境中。 1、首先建立proto文…...
Python中的list()和map() 用法
list() 在Python中,list() 是一个内置函数,用于创建列表(list)对象。它有几个不同的用途,但最常见的是将一个可迭代对象(如元组、字符串、集合或其他列表)转换为一个新的列表。 以下是一些使用…...
公网环境下如何端口映射?
公网端口映射是一种网络技术,它允许将本地网络中的设备暴露在公共互联网上,以便能够从任何地方访问这些设备。通过公网端口映射,用户可以通过互联网直接访问和控制局域网中的设备,而无需在本地网络中进行复杂的配置。 公网端口映射…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
