码迷,mamicode.com
首页 > 其他好文 > 详细

数组之---数组为什么特殊?

时间:2014-07-19 02:47:16      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:java   数组   数组与容器的区别   

数组为什么特殊?

Java中大量其他的方式可以持有对象,那么,到底是什么使数组变得与众不同呢?

数组与其他种类的容器之间的区别有三方面:

效率

类型

保存基本类型的能力

与众不同的原因?

泛型之前:

在泛型之前,其他的容器类在处理对象时,都将它们是做没有任何具体类型。也就是说,

它们将这些对象都当做Java中所有类的根类Object处理。数组之所以优于泛型之前的容器,

就是因为你可以创建一个数组去持有某种具体类型,这意味着你可以通过编译器检查,防止错误类型和抽取不当类型。

数组可以持有基本类型,而泛型之前的容器则不能。

泛型之后:

有了泛型,容器就可以指定并检查它们所持有对象的类型,并且有了自动包装机制,因此,容器看起来还是能够持有基本类型。

我们看一个Demo。

class BerylliumSphere {
	
	private static long counter;	// 静态变量是属于类的,且唯一。
	private final long id = counter++;		// final变量值不可以被改变
	
	public String toString() {
		return "Sphere " + id;
	}
}

public class Main {
	
	public static void main(String[] args) {
		
		/**
		 *	对象数组
		 * */
		BerylliumSphere[] spheres = new BerylliumSphere[10]; // 创建一个数组对象,数组内引用被初始化为NULL
		
		// [null, null, null, null, null, null, null, null, null, null]
		System.out.println(Arrays.toString(spheres));
		
		// 在堆中创建对象,交给数组的引用
		for (int i = 0; i < 5; i++) {
			spheres[i] = new BerylliumSphere();
		}
		
		// [Sphere 0, Sphere 1, Sphere 2, Sphere 3, Sphere 4, null, null, null, null, null]
		System.out.println(Arrays.toString(spheres));
		
		// Sphere 4
		System.out.println(spheres[4]);
		
		/**
		 * 容器
		 * */
		List<BerylliumSphere> sphereList = new ArrayList<BerylliumSphere>();
		
		// []
		System.out.println(sphereList);
		
		for (int i = 0; i < 5; i++) {
			sphereList.add(new BerylliumSphere());
		}
		
		// [Sphere 5, Sphere 6, Sphere 7, Sphere 8, Sphere 9]
		System.out.println(sphereList);
		
		// Sphere 9
		System.out.println(sphereList.get(4));
		
		
		/**
		 * 原始类型数组
		 * */
		int[] integers = {0, 1, 2, 3, 4, 5};
		
		// [0, 1, 2, 3, 4, 5]
		System.out.println(Arrays.toString(integers));
		
		// 4
		System.out.println(integers[4]);
		
		/**
		 * 原始类型容器
		 * */
		List<Integer> intList = new ArrayList<Integer>(Arrays.asList(0,1,2,3,4,5));
		
		intList.add(97);
		
		// [0, 1, 2, 3, 4, 5, 97]
		System.out.println(intList);
		
		// 4
		System.out.println(intList.get(4));
		
	}
}

结果:

随着自动包装机制的出现,容器已经可以与数组几乎一样方便的用于基本类型中了。

数组硕果仅存的有点就是效率。然而,如果要解决更一般化的问题,那数组就可能会受到过多的限制,因此这种情况下,你还是会使用容器。


数组之---数组为什么特殊?

标签:java   数组   数组与容器的区别   

原文地址:http://blog.csdn.net/biezhihua/article/details/37938941

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!