0

0

Array和ArrayList的区别与联系

巴扎黑

巴扎黑

发布时间:2017-06-26 10:22:59

|

2510人浏览过

|

来源于php中文网

原创

  博主今天去了一个java的实习面试,发现有好多java最基础的数据结构对于博主来说反而感到陌生,在面试官问一些常见的例如hashmap这样的数据结构,博主能回答的头头是道,但是在问到array和arraylist的区别和联系之后,却让博主一脸懵。好吧,不多说,现在特此整理。

  首先, Array是java中的数组,我们声明java的数组有三种方式:

1 int[] a = new int[10]; 2 int a[] = new int[10]; //这种方式同c语言一样3 int a[] = {1,2,3,4};

从上面的声明中可以看出来,我们在定义了一个数组的时候,必须指定这个数组的数据类型,也就是说,数组是相同数据类型的集合。另外,在数组声明的时候,我们也声明了数组的大小,数组的元素个数是固定的。

下面,我们看看数组的应用:

 1 import java.util.Arrays; 2  3 /** 4  * @author jy 5  * @time 下午7:59:26 6  */ 7 public class ArrayAndArrayList { 8     public static void main(String[] args) { 9         10      int a[] = new int[4];11      System.out.println(a.length);  //数组的长度属性12      13      int b[] = {1,2};14      int c[] = {1,2};15      System.out.println(b.equals(c));  //输出为false,可见数组并没有重写hashcode()和equals()方法16      System.out.println(Arrays.equals(b, c));  //利用java.util.Array的equals()来判断数组是否相等,这里输出true17      System.out.println(isEquals(b,c));18      19     }20 21     /**22      * 重写方法来手动实现数组之间的比较方法23      */24     public static boolean isEquals(int[] b, int[] c) {25         26         if(b == null || c == null){27             return false;28         }29         if(b.length != c.length){30             return false;31         }32         for (int i = 0; i < c.length; i ++) {33             if(b[i] != c[i]){34                 return false;35             }36         }37         return true;38     }39     40 }

可见,数组的长度是固定的,不可变的。数组并未重写object的hashcCode()和equals()方法。

  我们都知道,数组还可以是二维的,下面我们看看二维数组是如何声明的:

1 int[][] da = new int[2][3];  //推荐用这种声明方式,更能表明数组的类型2 int db[][] = new int[4][3];

但是,有一种变长的二维数组:

1 int[][] dc = new int[2][];  //第一维的大小不能空缺,第二维的大小可以是不一样的。2 dc[0] = new int[2];3 dc[1] = new int[3];

好了,数组这个基本的数据结构的应用我们就说到这里,为了突出主题,其余的一些不相干的应用我们就不扯了。

 

  下面,我们再来看看ArrayList这个集合:

ArrayList是动态数组,也就是数组的复杂版本,它可以动态的添加和删除元素,ArrayList实现了java.util.Collections.Collection.List接口。下面我们来看一下最基本的声明:

ArrayList list = new ArrayList(10);  
ArrayList list1 = new ArrayList();

第一种声明中,在不使用泛型的情况下,这个list是可以添加进不同类型的元素的,而且arraylist是可以不用指定长度的。在使用泛型时,我们就只能添加一种类型的数据了。

ArrayList的重要方法和属性如下代码所示:

汇成机械行业企业网站系统11.2
汇成机械行业企业网站系统11.2

拥有企业网站常用的模块功能:企业简介模块、联系我们模块、新闻(文章)模块、产品模块、图片模块、招聘模块、在线留言、反馈系统、在线交流、友情链接、网站地图、栏目管理、网站碎片、管理员与权限管理等等,所有模块的分类均支持无限级别的分类,可拓展性非常强大。其中包括万能的栏目管理系统、网站碎片管理系统,通过这些系统,可以组合出各种不同的页面和应用。系统带强大灵活的后台管理功能、支持伪静态URL页面功能、自

下载
 ArrayList list =  ArrayList         list.add(1         list.add(2         list.add(3         list.remove(1         Object[] p = list.toArray();           System.out.println(p[0         System.out.println(list.contains(4));           System.out.println(list.size());           System.out.println(list.get(0));

 上面显示了ArrayList的一些重要的方法。下面我们就这两个集合类进行对比:

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

  (2)存储的数据类型

          ArrayList可以存储异构对象,而Array只能存储相同数据类型的数据。

  (3)长度的可变

           Array的长度实际上是不可变的,二维变长数组实际上的长度也是固定的,可变的只是其中元素的长度。而ArrayList的长度既可以指定(即使指定了长度,也会自动2倍扩容)也可以不指定,是变长的。

   (4)存取和增删元素

           对于一般的引用类型来说,这部分的影响不是很大,但是对于值类型来说,往ArrayList里面添加和修改元素,都会引起装箱和拆箱的操作,频繁的操作可能会影响一部分效率。另外,ArrayList是动态数组,它不包括通过Key或者Value快速访问的算法,所以实际上调用IndexOf、Contains等方法是执行的简单的循环来查找元素,所以频繁的调用此类方法并不比你自己写循环并且稍作优化来的快,如果有这方面的要求,建议使用Hashtable或SortedList等键值对的集合。

 

  好了,关于这两个数据结构的对比我们就到这里,如果有觉得不妥的地方,欢迎大家指正。

  另外,这是我第一次写博客,求轻喷。

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

43

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

35

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

41

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

204

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

9

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

8

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP函数之array数组函数视频讲解
PHP函数之array数组函数视频讲解

共76课时 | 25.7万人学习

Rust 教程
Rust 教程

共28课时 | 4万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号