比较Java中的数组和集合

Java中数组和集合之间的区别

数组:

1)数组的大小是固定的(即,我们不能在运行时增加或减少大小)。

class ArrayClass
{
	public static void main(String[] args){
		int[] a = new int[10];
		System.out.println(a[0]);
	}
}

输出(描述)

将为10个元素创建内存,并且所有元素初始都初始化为0(即,新的关键字创建对象),并且a [0]表示打印第一个元素值,即0。

E:\javasource>java ArrayClass
0

2)如果不建议使用内存视图数组的概念(即,如果我们对小于数组大小的元素使用内存,则数组大小是固定的,这样会浪费内存)。

3)在性能方面,建议使用数组数组的概念(即,我们事先知道数组的大小或在编译时知道数组的大小,因此在运行时没有开销,这就是为什么需要较少的时间)。

4)数组可以容纳同类数据元素(即,数组元素属于同一类型)。

class ArrayClass
{
	public static void main(String[] args){
		int[] a = new int[10];
		a[0]	= new boolean[10];
		System.out.println(a[0]);
	}
}

输出(描述)

a是int []类型的数组,因此它只能容纳int []个元素,但是我们在这里所做的工作a [0] = new boolean [10]意味着在int类型的数组中分配布尔值,因此如果我们在编译时出错写a [0] = new int [10]而不是a [0] = new boolean [10]然后没有错误。

E:\javasource>javac ArrayClass.java
ArrayClass.java:8: incompatible types
found   : boolean[]
required: int
                        a[0]    = new boolean[10];
                                  ^
1 error

5)数组不提供现成的方法支持,这就是为什么我们可以调用数组的原因,因为数组不是基础数据结构。

6)数组能够保存原语(字节,短整数,整数,长整数等)和对象(包装类,字符串,StringBuffer或任何用户定义的类)。

示例1:对于对象类型

class ArrayClass
{
	public static void main(String[] args){
		Integer[] a = new Integer[10];
		System.out.println(a[0]);
	}
}

输出(描述)

将为10个元素创建内存,并且所有元素初始都以null初始化(即,如果未定义,则默认情况下默认使用null初始化新的关键字创建对象和对象类型元素,而a [0]表示打印第一个元素值,即null。

E:\javasource>java ArrayClass
null

示例2:对于基元类型

class ArrayClass
{
	public static void main(String[] args){
		int[] a = new int[10];
		System.out.println(a[0]);
	}
}

输出(描述)

将为10个元素创建内存,并且所有元素初始都初始化为0(即,新的关键字创建对象),并且a [0]表示打印第一个元素值,即0。

E:\javasource>java ArrayClass
0

集合:

1)集合本质上是可增长的(即我们可以在运行时增大或减小大小)。

示例

import java.util.*;

class CollectionsClass
{
	public static void main(String[] args){
		ArrayList al = new ArrayList(2);
		al.add(10);
		al.add(20);
		System.out.println(al);
		al.add(30);
		System.out.println(al);
	}
}

输出(描述)

最初,ArrayList的大小为2,然后添加2个元素,然后添加第三个元素,因此将创建新的ArrayList,因此新的容量=当前容量* 3/2 +1

E:\javasource>java CollectionsClass
[10, 20]
[10, 20, 30]

2)如果是内存观点,建议使用集合概念(即集合大小不是固定的),将根据集合元素的大小分配内存。

3)在性能方面,不建议使用集合概念(即我们不知道集合的大小或编译时的大小),假设最初为10个元素分配了内存作为第11元素,那么将再次分配新的内存被分配,所有元素将被复制到新的内存中)。

4)集合可以同时包含同质和异类数据元素(即,Collection元素可以具有不同的类型)。

示例

import java.util.*;

class CollectionsClass
{
	public static void main(String[] args){
		ArrayList al = new ArrayList(10);
		al.add("A");
		al.add("true");
		System.out.println(al);
	}
}

输出(描述)

ArrayList对象可以同时包含同质和异质元素,例如A是String类型,true是Boolean类型,两者都是不同的类型(异构)。

E:\javasource>java CollectionsClass
[10, true]

5)集合提供现成的方法支持,这就是我们可以调用的原因,因为集合是基础数据结构。

示例

import java.util.*;

class CollectionsClass
{
	public static void main(String[] args){
		ArrayList al = new ArrayList(10);
		al.add("A");
		al.add("true");
		al.remove(1);
		System.out.println(al.size());
	}
}

输出(描述)

加(), remove()size()等等都是现成方法。

E:\javasource>java CollectionsClass
1

6)集合只能容纳对象(包装类,字符串,StringBuffer或任何用户定义的类)类型。没有这样的原始功能。