一、Java中数组
数组用来存放固定数量的同类元素,声明方法:
T[] ref,T ref[],如int[] intAry; int intAry[]。推荐用T[]的方式,后一种方式为兼容C++习惯写法。
初始化方法:
new设置数组长度,或者直接列出数组元素,如下:
// 创建数组,如果在创建的同时不初始化数组则必须指定其大小
intArray0 = new int[3]; // 创建数组时,不指定数组大小则必须在创建的同时初始化数组
intArray1 = new int[]{0,1,2}; // 静态初始化简化方式
int intArray3 [] = {30,31,32};
二、Java 数组和集合之间的关系
世间上本来没有集合,(只有数组参考C语言)但有人想要,所以有了集合
有人想有可以自动扩展的数组,所以有了List
有的人想有没有重复的数组,所以有了set
有人想有自动排序的组数,所以有了TreeSet,TreeList,Tree** 而几乎有有的集合都是基于数组来实现的.
因为集合是对数组做的封装,所以,数组永远比任何一个集合要快 但任何一个集合,比数组提供的功能要多 一:数组声明了它容纳的元素的类型,而集合不声明。这是由于集合以object形式来存储它们的元素。 二:一个数组实例具有固定的大小,不能伸缩。集合则可根据需要动态改变大小。 三:数组是一种可读/可写数据结构---没有办法创建一个只读数组。然而可以使用集合提供的ReadOnly方法,以只读方式来使用集合。该方法将返回一个集合的只读版本。
注:java中可创建只读集合和同步集合,方法如下:
// 只读集合
List<String> readOnlyList = Collections.unmodifiableList(list);
System.out.println(readOnlyList.getClass());
// 同步集合
List<String> synchronizedList = Collections.synchronizedList(list);
System.out.println(synchronizedList.getClass());
如果试图对只读集合进行添加或修改,将会抛出UnsupportedOperationException异常:
如果不希望方法返回的集合被修改,就可以使用只读集合;如果想要获取线程安全的集合,就可以使用同步集合。
三、数组和集合的差异
数组array是固定大小不能动态改变,只能存同一种类型,可传递继承类型,即Number是Integer的父类,则Number[]是Integer[]的父类型,即可将Integer[]当做实参传入形参要求为Number[]的函数中。
集合是对数组能力的扩展,基于数据或链表结构实现,只能存放引用类型,不能存放基本类型;不能进行类型传递,即Listt<Number>不能看作List<Integer>的父类型。
四、数组集合的使用建议