数组:数组是在内存中存储相同数据类型的连续的空间 -----声明一个数组就是在内存空间中划出一串连续的空间
1、数组名代表的是连续空间的首地址
2、通过首地址可以依次访问数组所有元素
3、元素在数组中的排序叫做下标从零开始
数组的使用
数组长度一旦声明,不可改变不可追加
数组声明缩写
int[ ] arr={12,3,4,8,5,6,6,7,8,8,9,8};
int [ ] arr1=new int[ ]{12,3,4,8,5,6,6,4};
new int[ ]的[ ]一定不能放内存大小
一般区别:
1. ArrayList的实现是基于数组,LinkedList的实现是基于双向链表。
2. 对于随机访问,ArrayList优于LinkedList
3. 对于插入和删除操作,LinkedList优于ArrayList
4. LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。
在时间复杂度方面的区别:
对于随机访问,ArrayList的访问速度更快。
对于插入和删除操作,LinkedList的速度更快。
如果一次性地通过add从集合尾部添加元素,添加完成后只需读取一次,那么建议使用ArrayList,如果频繁的添加或者通过indexOf来查找元素,则用LinkedList
在空间复杂度方面的区别:
在LinkedList中有一个私有的内部类,定义如下:
private static class Entry {
Object element;
Entry next;
Entry previous;
}
LinkedList中的每一个元素中还存储了它的前一个元素的索引和后一个元素的索引。
ArrayList使用一个内置的数组来存储元素,这个数组的起始容量是10,当数组需要增长时,新的容量按如下公式获得:新容量 = 旧容量*1.5 + 1,也就是说每一次容量大概会增长50%
总结:
ArrayList和LinkedList的区别如下:ArrayList和LinkedList都是线程不安全的,所以不是它们的区别。
1. ArrayList的实现是基于数组,LinkedList的实现是基于双向链表。
2. 对于随机访问,ArrayList优于LinkedList,ArrayList可以根据下标以O(1)时间复杂度对元素进行随机访问。而LinkedList的每一个元素都依靠地址指针和它后一个元素连接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)
3. 对于插入和删除操作,LinkedList优于ArrayList,因为当元素被添加到LinkedList任意位置的时候,不需要像ArrayList那样重新计算大小或者是更新索引。
4. LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。