欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ArrayList与LinkedList的使用与区别

程序员文章站 2022-05-26 23:33:39
...

ArrayList与LinkedList的使用与区别

ArrayList

  1. 其中最常用的是java.util.ArrayList;ArrayList内部基于数组+数据拷贝的实现,初始容量是10,当添加的元素位置超出容量时,会在原数组的容量基础上扩充为1.5倍;由于ArrayList是基于数组的实现,因此在进行数据检索时的效率很高,只需要获取到元素的索引就能快速定位到元素的位置,但是由于数组的长度一旦定义,则无法修改,因此在对ArrayList进行元素的添加和删除的时候会导致数组的容量发生变化,需要频繁的创建新数组的对象,因此在进行添加,删除时效率很低;ArrayList适合做查询不适合做修改(查快改慢)

ArrayList基本使用:

public class ArrayListDemo {

	public static void main(String[] args) {
		List<Object> list = new ArrayList<>();
		list.add("hello");
		list.add(true);
		list.add(10);
		list.add("he");
		list.add(10);
		//加入元素
		list .add(1,"world");
		System.out.println("集合中是否包含指定元素:"+list.contains("hello"));
		//替换元素
		list.set(1, "qikang");
		//截取一个子集合
		list = list.subList(2, 5);
		System.out.println(list.toString());
		
		Object[] objs = list.toArray();
		System.out.println(objs.length);
		//清空集合
		list.clear();
		System.out.println("集合是否为空:"+list.isEmpty());
	}

}

LinkedList

  1. LinkedList是基于双向链表的实现(链表的结构如下),在元素进行增删操作时,只需要修改链表的首尾指针即可轻松实现,因此LinkedList适合用于频繁的修改操作中;但是在进行元素的检索时,只能从链表头,链表尾部依次搜索,查询效率相对较低(LinkedList改快查慢)。LinkedList是List的子类,List中的方法LinkedList都是可以使用

LinkedList基本使用:

LinkedList list = new LinkedList();
list.add("rose");
list.add("jack");
list.add("bob");
list.add("tom");
list.add("jarry");
list.add("bob");
list.add(null);

//这里的数值不是索引,表示的链表需要进行节点搜索的次数
System.out.println(list.get(5));

for (Object obj : list) {
    System.out.println("--->"+obj);
}
System.out.println(list.size());

//向集合的头部插入元素
list.addFirst("123");
//向集合的尾部插入元素
list.addLast("789");
System.out.println(list.getFirst()+"获取头部元素");
System.out.println(list.getLast()+"获取尾部元素");

//从头部弹出元素(将元素从集合中删除)
System.out.println(list.pop());
//向集合中加入元素(等同addFirst)
list.push("456");
System.out.println(list);

总结:ArrayList与LinkedList的区别
ArrayList与LinkedList的使用与区别
ArrayList与LinkedList的存储方式如上图所示。
区别1:数据结构不同
ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。
区别2:效率不同
当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。
当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。
区别3:*性不同
ArrayList*性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList*性较高,能够动态的随数据量的变化而变化,但是它不便于使用。
区别4:主要控件开销不同
ArrayList主要控件开销在于需要在List列表预留一定空间;而LinkList主要控件开销在于需要存储结点信息以及结点指针信息。

相关标签: java