Java中Arraylist和Array有什么区别

小编 951

Java中Arraylist和Array有以下区别:1.性质不同;2.储存内容不同;3.维度不同;4.提供属性不同;5.性能不同;6.灵活性不同;7.迭代性不同;8.类型安全性不同;9.泛型支持不同;10.支持操作不同。性质不同在于,ArrayList是集合,长度可变;而Array是数组,其长度定义后不可改变。

1.性质不同

ArrayList是集合,它是一个来自Java集合类的类,一个接口(API),其长度是可变的。java程序中子带了添加方法,可以自动新增一个数组并且添加完后会自动抛弃旧数组。并且,每次添加新数组的时候都会自动检查数组中的空间是否足够。

Array是数组,它是本地的程序设计组件或者数据结构,其长度在定义后是不可改变的。如果需要在数组中添加其他的元素,就必须要新建一个数组且数组长度比原数组长度多一,然后再把数组中的内容复制到新数组中,最后再根据下标添加需要的内容。

2.储存内容不同

ArrayList只能包含对象类型,但Array可以包含基本类型和对象类型。需要注意的一点是,Array在储存时,只能储存同一种数据类型,如果定义的是整数类数组,那么这个数组中就只能存储整数。而ArrayListZ在存储整数数据类型的时候,会把整数变成Object(对象)。

3.维度不同

ArrayList和Array的另外一个重要的区别就是:Array可以使多维度的,而ArrayList不可以。如你可以设置一个二维数组或者三维数组,可以使你创在一个特殊的数据结构来代表矩阵或者2D形式(terrains)。

4.提供属性不同

ArrayList提供一个size()方法来告诉你当前时间点ArrayList存储了多少个元素。size() 总是和length不同的,它也是ArrayList的容量。

Array仅仅提供一个length属性,告知Array里有多少个插槽,即可以存储多少个元素,但它没有提供任何方法来告诉你哪些插槽是满的,哪些是空的,即当前元素的个数。

5.性能不同

ArrayList和Array的性能不同,主要体现于内存的使用和CPU耗时。对于基于索引的访问,ArrayList和array均提供O(1)性能,但是如果添加新元素会触发调整大小,则添加在ArrayList中可以为O(logN),因为这涉及在后台创建新并数组从旧数组中复制元素到新的数组。而在存储相同数量的对象时,ArrayList所需要的内存也是比array大的。

6.灵活性不同

ArrayList比普通的数组分散更灵活,因为它是动态的。它可以在需要时自行增长,而Array布局则无法实现。ArrayList中还允许您删除Array无法实现的元素。通过删除,我们的意思不仅是将零分配给相应的索引,还意味着将其余元素向下复制一个索引,而ArrayList中会自动为您完成。

7.迭代性不同

ArrayList提供了更多的迭代方式,即Array只能通过循环索引一一访问所有元素。例如:针对循环的增强和do-while来遍历数组,但ArrayList还可以使用Iterator和ListIterator类来遍历。

8.类型安全性不同

ArrayList是类型安全的,因为它支持泛型(Generics) 允许编译器检查ArrayList 里所包含的对象是否是正确的类型。

然而,Array并不支持泛型,这代表在编译时期检查Array所保存对象的类型是不可能的,但是Array通过抛出ArrayStoreException异常的方式来进行运行时的类型检查如果你存储了一个错误类型的对象。例如:存储一个String 到int Array里。

9.泛型支持不同

ArrayList支持Generic(泛型),Array不支持Generic(泛型)。由于数组是协变性的,所以你可以在Array上使用泛型(Since an array is of covariant type, you can use Generics with them)。这个表示编译器不可能检查Array的类型安全,但是可以校验类型安全。

10.支持操作不同

由于ArrayList在内部由数组支持,因此它公开了Array可能执行的操作,但是鉴于其动态特性,它还没有添加Array无法执行的操作。例如,您可以将元素存储在ArrayList和Array中,但是只有ArrayList允许您删除元素。

另外,ArrayList和Array都提供了检索元素的方法,但ArrayList还提供了清除和重用的操作,例如clear()和removeAll(),Array不提供该操作,但是您可以循环遍历Array并为每个索引分配null以模拟它。

延伸阅读

Java中整数数值类型有哪些

Java中整数数值类型有四种:byte型、short型(短整型)、int型(整型)和long型(长整型)。

1.byte型

使用byte关键字,来定义byte型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。byte型是整型中所分配的内存空间是最少的,只分配1个字节;取值范围也是最小的,只在-128和127之间,在使用时一定要注意,以免数据溢出产生错误。

2.short型

short型即短整型,使用short关键字来定义short型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。系统给short型分配2个字节的内存,取值范围也比byte型大了很多,在-32768和32767之间,虽然取值范围变大,但是还是要注意数据溢出。

3.int型

int型即整型,使用int关键字来定义int型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。系统分配int变量4个字节。int型变量取值范围很大,在-2147483648和2147483647之间,足够一般情况下使用,所以是整型变量中应用较广泛的。

4.long型

long型即长整型,使用long关键字来定义long型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。而在对long型变量赋值时结尾必须加上“L”或者“l”,否则将不被认为是long型。当数值过大,超出int型范围的时候就使用long型,系统分配给long型变量8个字节,取值范围则更大,在-9223372036854775808和9223372036854775807之间。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部