数组,ArrayList,Array类,Arrays类的区别
参考回答:
Array(数组)和ArrayList的不同点:
Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
Array大小是固定的,ArrayList的大小是动态变化的。
ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。
Array类和Arrays类:
这两个类其实都可以看做工具类,里面有很多对于数组操作的方法,但是要注意的是这两个类都是用final声明的,无法被继承,也无法实例化,里面的方法都是用private修饰的,外部无法调用。
但是两者中的方法又有一定的区别,Array中的方法主要是对于数组的动态创建和访问进行操作,而后者中的方法主要是一些排序等算法上的操作,后面会详细列出
分析:
Array类:
源码解释:class provides static methods to dynamically create and* access Java arrays.
(这个类提供了静态方法去动态创建和访问java数组)
开始我对于这个动态创建和访问还是不太清楚,后来当我看了源码中的方法之后,我开始明白了!这里简单列举几个定义的方法(都是源码中的方法):
public static native int getLength(Object array)//获取数组长度
public static native Object get(Object array, int index)//获取指定索引的值
public static native void set(Object array, int index, Object value)//指定索引的值
我们可以看到,前面两个方法的确是对数组进行访问的,而第三个数组则是动态创建数组的,指定某个索引上的数组值!下面我们来看实例:
int[] data = new int[10];//这里并没有进行初始化 默认值为0
Array.set(data,7,6);//设置data【7】=6
System.out.println(Array.getLength(data));//获取长度
System.out.println(Array.get(data,7));//获取data【7】
for(int i = 0;i<data.length;i++){
System.out.print(data[i]);
}
输出:
10
6
0000000600
这么一看就可以大概明白了 Array的用法了!具体里面还有其他的方法,不想自己看源码的,可以看这篇博客。https://blog.csdn.net/abc_12366/article/details/79915619
Arrays类:
这个类和刚刚的Array类功能差不多,都是提供静态方法,对数组进行操作。
public static void sort(int[] a) {//这就是里面的sort函数
DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
}
实例:
int arr[] = {2,1,2,3,9,6,4,8};
String str[] = {"1111","22222"};
Arrays.sort(arr);
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]);
}
输出:
12234689
ArrayList:
ArrayList和数组的区别有以下几点:
1.ArrayList的长度是可变的,初始容量是10,扩容机制是1.5增长,而Array则是定长的
2.ArrayList中可以同时存储不同类型的数据,包括对象和基本数据类型,而数组在定义的时候,定义的是什么类型,就必须存什么类型(虽然对象和基本类型都可以)
3.ArrayList中也可以进行初始化定义必须存一种类型的变量
实例:
//简单的存储 遍历
ArrayList<String> arrayList =new ArrayList();
arrayList.add("1111");
arrayList.add("2222");
for(int i = 0;i < arrayList.size();i++){
System.out.println(arrayList.get(i));
}
//可以同时存储两种不同类型的变量
ArrayList arrayList1 = new ArrayList();
arrayList1.add(1);
arrayList1.add(person1);//person1是自己定义的一个类对象
for(int i = 0;i < arrayList1.size();i++){
System.out.println(arrayList1.get(i));
}
输出:
1
Person{name='fanglei', age=12}
总结:
其实最开始就是不知道Aarry类和数组有什么关系,后面发现其实就是对于数组的一些基本操作,不能够被实例化,然后引申到Arrays,ArrayList类的探究,也算是扩展了自己的知识吧!
就是说Array和Arrays看做工具类,对数组进行操作
而数组和ArrayList是两种类似的数组定义模式存储