当前位置: 首页 > 编程日记 > 正文

java中Array和ArrayList区别

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1)精辟阐述:
可以将 ArrayList想象成一种“会自动扩增容量的Array”。

2)Array([]):最高效;但是其容量固定且无法动态改变;
     ArrayList:  容量可动态增长;但牺牲效率;

3)建议:
基于效率和类型检验,应尽可能使用Array无法确定数组大小时才使用ArrayList
不过当你试着解决更一般化的问题时,Array的功能就可能过于受限。

4)Java中一切皆对象,Array也是对象。不论你所使用得Array型别为何,

Array名称本身实际上是个reference,指向heap之内得某个实际对象。

这个对象可经由“Array初始化语法”被自动产生,也可以以new表达式手动产生。

5)Array可做为函数返回值,因为它本身是对象的reference;

6)对象数组与基本类型数组在运用上几乎一模一样,唯一差别在于,前者持有得是reference,后者直接持有基本型别之值;
例如:
string [] staff=new string[100];
int [] num=new int[10];

7)容器所持有的其实是一个个reference指向Object,进而才能存储任意型别。当然这不包括基本型别,因为基本型别并不继承自任何classes。

8)面对Array,我们可以直接持有基本型别数值的Array(例如:int [] num;),也可以持有reference(指向对象)的Array;但是容器类仅能持有reference(指向对象),若要将基本型别置于容器内,需要使用wrapper类。但是wrapper类使用起来可能不很容易上手,此外,primitives Array的效率比起“容纳基本型别之外覆类(的reference)”的容器好太多了。

当然,如果你的操作对象是基本型别,而且需要在空间不足时自动扩增容量,Array便不适合,此时就得使用外覆类的容器了。

9)某些情况下,容器类即使没有转型至原来的型别,仍然可以运作无误。有一种情况尤其特别:编译器对String class提供了一些额外的支持,使它可以平滑运作。

10)对数组的一些基本操作,像排序、搜索与比较等是很常见的。因此在Java中提供了Arrays类协助这几个操作:sort(),binarySearch(),equals(),fill(),asList().

不过Arrays类没有提供删除方法,而ArrayList中有remove()方法,不知道是否是不需要在Array中做删除等操作的原因(因为此时应该使用链表)。

11)ArrayList的使用也很简单:产生ArrayList,利用add()将对象置入,利用get(i)配合索引值将它们取出。这一切就和Array的使用方式完全相同,只不过少了[]而已。

2.参考资料:
1)效率:
数组扩容是对ArrayList效率影响比较大的一个因素。
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。

ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。

2)类型识别:
ArrayList存入对象时,抛弃类型信息,所有对象屏蔽为Object,编译时不检查类型,但是运行时会报错。
ArrayList与数组的区别主要就是由于动态增容的效率问题了

3)ArrayList可以存任何Object,如String等。

转载自:http://blog.csdn.net/chenglansky/article/details/44567887

附Array和ArrayList的相互转换

public class Test {  public static void main(String[] args) {  List<String> list=new ArrayList<String>();  list.add("王利虎");  list.add("张三");  list.add("李四");  int size=list.size();  String[] array = (String[])list.toArray(new String[size]);  for(int i=0;i<array.length;i++){  System.out.println(array[i]);  }  }  
}
package test.test1;  import java.util.Arrays;  
import java.util.List;  public class Test {  public static void main(String[] args) {  String[] array=new String[3];  array[0]="王利虎";  array[1]="张三";  array[2]="李四";  List<String> list=Arrays.asList(array);  for(int i=0;i<list.size();i++){  System.out.println(list.get(i));  }            }  
}

转载于:https://my.oschina.net/u/3787897/blog/1634990

相关文章:

【组队学习】【31期】 吃瓜教程——西瓜书+南瓜书

吃瓜教程——西瓜书南瓜书 航路开辟者&#xff1a;谢文睿、秦州领航员&#xff1a;张海腾航海士&#xff1a;谢文睿、秦州 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/pumpkin-bookB 站视频&#xff1a;https://www.bilibili.com/video/BV1Mh411e7VU内…

设计模式之“代理模式”

代理&#xff08;Proxy&#xff09;模式给某一个对象提供一个代理&#xff0c;并由代理对象控制对原对象的引用。 代理模式的英文叫做Proxy或Surrogate&#xff0c;中文都可译成"代理"。所谓代理&#xff0c;就是一个人或者一个机构代表另一个人或者另一个机构采取行…

php更新数据库时间戳,关于Thinkphp5 里面数据库自动更新与创建时间的问题

我们有时候往数据库里面写入新的一条数据 时&#xff0c;可能需要自动更新时间、自动创建时间、这样就可以方便我们、从而大大减小我们的代码量&#xff1b;不过在TP5里面有一个小规律&#xff0c;就是save()与insert()语句的区别&#xff1b;1、我们先看一下TP5里面自动更新时…

【组队学习】【31期】LeetCode 刷题

LeetCode 刷题 航路开辟者&#xff1a;杨世超领航员&#xff1a;刘军航海士&#xff1a;杨世超、李彦鹏、叶志雄、赵子一 基本信息 开源内容&#xff1a;https://github.com/itcharge/LeetCode-Py开源电子书&#xff1a;https://algo.itcharge.cn内容属性&#xff1a;合作课…

DOM---文档对象模型(Document Object Model)的基本使用

一、DOM简介  文档对象模型&#xff08;Document Object Model&#xff0c;简称DOM&#xff09;&#xff0c;是W3C组织推荐的处理可扩展置标语言的标准编程接口。它是一种与平台和语言无关的应用程序接口(API),它可以动态地访问程序和脚本,更新其内容、结构和www文档的风格(目…

剑指offer--3题

题目&#xff1a;输入一个整形数组&#xff0c;数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组&#xff0c;每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5&#xff0c;和最大的子数组…

php可以打印一个页面,利用html实现分页打印功能的实例详解

本篇介绍利用html实现分页打印功能的实例详解&#xff0c;有些不想打印出来的分页打印的都可以应用这类样式进行控制 在非打印时是无效的。页面打印/* 应用这个样式的在打印时隐藏 */.noPrint {display: none;}/* 应用这个样式的&#xff0c;从那个标签结束开始另算一页&#x…

java动态加载配置文件

最近项目中需要做定时任务&#xff0c;即定时数据库的备份。定时时间用户可以在界面中配置&#xff0c;要求配置修改好立即生效。 想不到什么好办法。下面是一种实现思路 把用户配置的时间存到properties配置文件中&#xff0c;定时任务每隔一分钟执行一次&#xff0c;每次执行…

商品秒杀,防并发解决思路

我们在做电商项目的时候,经常会遇到抢购秒杀的问题&#xff0c;综合来说主要是两个问题 一&#xff0c;高并发情况下对数据库产生的压力 二&#xff0c;如何避免超卖(库存< 0)的情况。 针对这两个问题来谈下解决思路 一,缓解数据库压力 用 缓存就可以解决 例如redis,memecac…

【组队学习】【31期】动手学数据分析

动手学数据分析 航路开辟者&#xff1a;陈安东、金娟娟、杨佳达、老表、李玲、张文涛、高立业领航员&#xff1a;陈玉立航海士&#xff1a;陈安东、武帅、肖涵哲、叶前坤、沈豪 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/hands-on-data-analysis内容…

php不报错怎么回事,解决PHP 7等web编程语言不报错一例

PHP的开发者必须尽快转到PHP 7平台&#xff0c;因为原来在PHP 5下开发的程序&#xff0c;有很多在PHP 7下都会报错。PHP 5的程序改为PHP 7的写法&#xff0c;工作量是很大的&#xff0c;所以开发者只能一步到位转到PHP 7平台。PHP 7增强了数据类型&#xff1b;数组与变量名不能…

在存储过程中如何实现将ID列表字符串传入IN()

我们在平常编写sql语句时&#xff0c;经常碰到要把id列表字符串&#xff08;比如&#xff1a;001&#xff0c;002&#xff0c;003&#xff0c;....)当做参数传递给存储过程&#xff0c; 那么在存储过程中要用in作为条件进行记录的过滤&#xff0c;那么采用in(idList)&#xff0…

【组队学习】【31期】数据可视化(Matplotlib)

数据可视化&#xff08;Matplotlib&#xff09; 航路开辟者&#xff1a;杨剑砺、杨煜、耿远昊、李运佳、居凤霞领航员&#xff1a;贾献华航海士&#xff1a;杨剑砺、郭棉昇、张文恺、肖桐 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/fantastic-matplo…

java学习路线图(2018年最新版)

最近有些网友问我如何自学 Java 后端&#xff0c;还有些是想从别的方向想转过来&#xff0c;但都不太了解 Java 后端究竟需要学什么&#xff0c;究竟要从哪里学起&#xff0c;哪些是主流的 Java 后端技术等等&#xff0c;导致想学&#xff0c;但又很迷茫&#xff0c;不知从何下…

php instr函数,oracle的instr函数用法

这几天在做一个项目的时候&#xff0c;做到关于用户组权限分配的问题&#xff0c;用到了Oracle的instr函数&#xff0c;现在好好学习下这个函数吧。 在Oracle/PLSQL中&#xff0c; instr 函数返回要截取的字符串在源字符串中的位置。 语法如下&#xff1a;instr( string1, stri…

浏览器内核Trident/Gecko/WebKit/Presto

“浏览器内核”主要指渲染引擎(Rendering Engine)&#xff0c;负责解析网页语法(如HTML、JavaScript)并渲染、展示网页。因此&#xff0c;所谓的浏览器内核通常也就是指浏览器所采用的渲染引擎&#xff0c; 渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏…

Intellij IDEA 将工程转换成maven工程 详解

1> 右键工程&#xff0c;点击 Add Framework Support2> 选中 Maven&#xff0c;再点击 OK3> 工程根目录自动生成 pom.xml 文件&#xff0c;这样 工程就支持 Maven版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 http://blog.csdn.net/che…

【组队学习】【31期】水很深的深度学习

水很深的深度学习 航路开辟者&#xff1a;刘洋领航员&#xff1a;陈宇航海士&#xff1a;刘洋、陈陟原、左凯文、初晓宇、刘羽中 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/unusual-deep-learning内容属性&#xff1a;公测课程内容说明&#xff1a;本…

php返回结果判断,老司机在判断返回结果时翻了个身(ThinkPHP)

“这篇文章属于基本内容。看到它的学生检查他们的代码是否有同样的问题“序言小q又带着问题来了&#xff0c;今天的问题估计是大多数同志都会犯的问题。问题是使用ThinkPHP时查询返回的结果是否为空。你自信吗&#xff1f;你不知道的是空的&#xff01;如果你是这样认为的&…

ZooKeeper客户端地址列表的随机原理

原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nileader.blog.51cto.com/1381108/932948查看PDF版本 转载请用注明&#xff1a;ni掌柜nileadergmail.com 在之前一个文章《ZooKeeper Jav…

Intellij IDEA使用教程(超详细)

转自 http://www.phperz.com/article/15/0923/159067.html转载于:https://www.cnblogs.com/lijingran/p/8585430.html

【组队学习】【31期】青少年编程(Scratch 四级)

青少年编程&#xff08;Scratch 四级&#xff09; 航路开辟者&#xff1a;王思齐、马燕鹏领航员&#xff1a;马燕鹏航海士&#xff1a;王思齐、马燕鹏 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/team-learning-program/tree/master/Scratch内容属性&…

java中mypoiexception,java - 如何使用Poi获取Java中单元格的数据验证源? - 堆栈内存溢出...

此问题包含多个不同的问题。首先&#xff0c;我们需要获取工作表的数据验证&#xff0c;然后为每个数据验证获取数据验证所适用的Excel单元格范围。 如果该单元格位于该单元格范围之一中&#xff0c;并且数据验证是列表约束&#xff0c;则进行进一步处理。 否则返回默认值。如果…

[20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED2.txt

[20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED2.txt--//简单探究12c TABLE ACCESS BY INDEX ROWID BATCHED特性.--//当使用12c时,执行计划出现TABLE ACCESS BY INDEX ROWID BATCHED,做一些探究.--//本文主要探究如何使用提示或者隐含参数控制这种特性.1.环境:SCOTTtest01…

Angularjs集成第三方js插件之Uploadify

有时候需要用一些第三方插件&#xff0c;比如datepicker&#xff0c;slider&#xff0c;或者tree等。以前的做法是直接通过jquery取得某个元素&#xff0c;然后调用某个方法即可。但在angularjs中&#xff0c;不能直接这么写&#xff0c;必须写在directive中。 开源项目Angular…

备考12月份电子学会青少年编程能力等级测试(图形化)的公益训练营即将开营

一、考试安排 考试方式 考试形式&#xff1a;在线居家考试&#xff08;全国&#xff09;报名时间&#xff1a;9月26日08:00 ~ 11月23日16:00退费截止时间&#xff1a;11月23日16:00准考证下载时间&#xff1a;11月30日 ~ 考前1天 考前集中测试时间 12月9日&#xff08;周四…

mysql left join超时,MySQL 行锁超时排查方法优化

一、大纲#### 20191219 10:10:10,234 | com.alibaba.druid.filter.logging.Log4jFilter.statementLogError(Log4jFilter.java:152) | ERROR | {conn-10593, pstmt-38675}executeerror.updatexxxsetxxx ? , xxx ?whereRowGuid ?com.mysql.jdbc.exceptions.jdbc4.MySQLTra…

【优秀作业】蚁群优化算法

蚁群优化算法 一&#xff0e;概述 生物学家发现&#xff0c;自然界中的蚁群觅食是一种群体性行为&#xff0c;并非单只蚂蚁自行寻找食物源。蚂蚁在寻找食物源时&#xff0c;会在其经过的路径上释放一种信息素&#xff0c;并能够感知其它蚂蚁释放的信息素。信息素浓度的大小表…

RPC-原理及RPC实例分析

还有就是&#xff1a;RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞&#xff1b; (2)NIO:Non-Blocking IO&#xff0c; 同步非阻塞; 参考&#xff1a;IO多路复用,同步&#xff0c;异步&#xff0c;阻塞和非阻塞 区别 在学校期间大家都写过不少程序&#xff0c;比如写个…

hdu 4608 I-number

http://acm.hdu.edu.cn/showproblem.php?pid4608 直接暴力 代码&#xff1a; #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<cmath> #include<set> #include<map> #include<stack> #inc…