数组和集合的区别


 

一、数组和集合的定义

1、数组的定义

  数组是java语言内置的数据类型,它是一个线性的序列,所以能快速访问其他的元素,数组和其他语言不同,当你创建了一个数组时,它的容量是不变的,而且在生命周期也是不能改变的,还有JAVA数组会做边界检查,如果发现有越界现象,会报RuntimeException异常错误,当然检查边界会以效率为代价

2、集合的定义

  数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义, 这样太麻烦了! 所以, Java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少。 

  JAVA还提供其他集合,list,map,set,他们处理对象的时候就好像这些对象没有自己的类型一样,而是直接归根于Object,这样只需要创建一个集合,把对象放进去,取出时转换成自己的类型就行了。

 

二、数组和集合的区别

1、数组和集合的比较

(1)数组的特点

  a.数组本质上就是一段连续的内存空间,用于记录多个类型相同的数据

  b.数组一旦声明完毕,则内存空间固定不变

  c.插入和删除操作不方便,可能会移动大量的元素导致效率太低;

  d.支持下标访问,可以实现随机访问

  e.数组中的元素可以是基本数据类型,也可以使用引用数据类型

  f.数组是java语言中内置的数据类型,是线性排列的,执行效率或者类型检查(不懂),都是最快的.

 

(2)集合的特点

  a.内存空间可以不连续,数据类型可以不相同

  b.集合的内存空间可以动态地调整

  c.集合的插入删除操作方便,可以不移动大量元素;

  d.部分支持下标访问(例如list),部分不支持;  ArrayList就是基于数组创建的容器类.

  e.集合中的元素必须是引用数据类型

 

2、数组和集合的区别

  一、数组声明了它容纳的元素的类型,而集合不声明。

  二、数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。

  三、数组既可以存储基本数据类型 ,又可以存储引用数据类型, 基本数据类型存储的是值,引用数据类型存储的是地址值; 一个数组的存放的类型只能是一种(基本类型/引用类型)。

    集合存放的类型可以不是一种(不加泛型时添加的类型是Object)。(与Java数组不同,Java集合中不能存放基本类型数据,而只能存放对象的引用)。集合只能存储引用数据类型(对象), 集合中也可以存储基本数据类型,但是存储的时候会自动装箱(JDK1.5新特性)变成对象.

  四、数组是java语言中内置的数据类型,是线性排列的,执行效率或者类型检查都是最快的。 

  五、若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库(ArrayList就是基于数组创建的容器类),array不适用。

 

数组不是面向对象的,存在明显的缺陷,集合完全弥补了数组的一些缺点,比数组更灵活更实用,可大大提高软件的开发效率而且不同的集合框架类可适用于不同场合。 具体如下:

  1、数组优点

    1)数组的效率高于集合类.

    2)数组能存放基本数据类型和对象,而集合类中只能放对象。

  2、数组缺点

    3)数组容量固定且无法动态改变,集合类容量动态改变。

    4)数组无法判断其中实际存有多少元素length只告诉了array的容量

  3、集合优点

    5)集合有多种实现方式和不同的适用场合,而不像数组仅采用顺序表方式

    6)集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性调用即可实现各种复杂操作,大大提高软件的开发效率

 

三、使用情况:

  1. 如果元素个数是固定的, 推荐用数组

  2. 如果元素个数不是固定的, 推荐用集合

联系:使用相应的toArray()和Arrays.asList()方法可以互相转换。

 

四、转换

1、数组转换为集合:

Arrays.asList(数组)

示例:

int[] arr = {1,3,4,6,6}; Arrays.asList(arr); for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); }

  

2、集合转换为数组:

集合.toArray();

示例:

List list = new ArrayList(); list.add("a"); list.add("b"); list.toArray(); System.out.println(list.toString());

 

 
转载地址:
https://blog.51cto.com/14512197/2436215
https://www.cnblogs.com/aspirant/p/10396220.html
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM