2022-10-26 14:34:28
浏览数 (1)
ArrayList和LinkedList有什么区别:
- 1.ArrayList底层结构是顺序表(基于数组);
LinkList是链表;
- 2.ArrayList数据存放在内存空间上;
LinkList不是存放在连续的内存空间上;
- 3.ArrayList能够高效的进行 “随机访问 ” ,按照下面操作时间复杂度是O(1);
- 4.LinkList能够高效的进行插入删除,时间复杂度为O(1)
- 5.ArrayList在初始化的时候,可以通过capacity参数指定最大容量,当add尾插的时候,如果元素个数小于capacity,此时就会触发扩容操作。
LinkedList没有capacity这个概念,每次新插入一个元素,都去new一个特定的节点对象
- 6.ArrayList比较害怕内存碎;
LinkedList不怕
List代码实现
代码语言:javascript
复制public class TestWrapperClass {
public static void main(String[] args) {
//实例化一个List
List<String> list = new ArrayList<>();
//新增
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
//打印
System.out.println(list);
//使用下标访问
//如果是ArrayList访问的,get/set按下标访问比较高效,时间复杂度O(1)
//如果是LinkedList访问的,get/set按下标访问比较低效,时间复杂度O(n)
System.out.println("==============");
System.out.println(list.get(0));
//修改
list.set(0,"d");
System.out.println(list);
//截取部分内容
System.out.println(list.subList(1,3));//前闭后开区间
//重新构造一个list
List<String> arrayList = new ArrayList<>(list);
List<String> linedkList = new LinkedList<>(list);
System.out.println("=====相当于复制了List======");
//是改变原来的list的值,新生成的链表的值不会变化,所以是深拷贝
System.out.println(arrayList);
System.out.println(linedkList);
//向下转型
ArrayList<String> arrayList1 = (ArrayList<String>)list;
}