Java ArrayList or LinkedList
Java ArrayList
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
ArrayList 继承了 AbstractList ,并实现了 List 接口。
ArrayList 是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
添加元素
import java.util.ArrayList;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Weibo");
System.out.println(sites);
}
}
访问元素
import java.util.ArrayList;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Weibo");
System.out.println(sites.get(1)); // 访问第二个元素
}
}
修改元素
import java.util.ArrayList;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Weibo");
sites.set(2, "Wiki"); // 第一个参数为索引位置,第二个为要修改的值
System.out.println(sites);
}
}
删除元素
import java.util.ArrayList;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Weibo");
sites.remove(1); // 删除第二个元素
System.out.println(sites);
}
}
计算大小
import java.util.ArrayList;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Weibo");
System.out.println(sites.size());
}
}
Java ArrayList 方法
Java LinkedList
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。
Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。
与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。
链表可分为单向链表和双向链表。
以下情况使用 ArrayList :
- 频繁访问列表中的某一个元素。
- 只需要在列表末尾进行添加和删除元素操作。
以下情况使用 LinkedList :
- 你需要通过循环迭代来访问列表中的某些元素。
- 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
创建一个简单的链表实例:
// 引入 LinkedList 类
import java.util.LinkedList;
public class RunoobTest {
public static void main(String[] args) {
LinkedList<String> sites = new LinkedList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
System.out.println(sites);
}
}
Java LinkedList方法
Java ArrayList 和 LinkedList 的区别
数据结构:
ArrayList基于动态数组实现,内部维护一个数组,当数组满时会自动扩展容量。
LinkedList基于双向链表实现,每个元素都包含对前一个和后一个元素的引用。
访问元素的性能:
ArrayList在随机访问元素时性能较好,因为它可以通过索引直接访问数组中的元素。
LinkedList在随机访问时性能相对较差,因为它需要遍历链表来找到指定位置的元素。
插入和删除操作的性能:
在ArrayList中,插入和删除元素可能涉及到数组的拷贝操作,特别是在中间或开头插入/删除元素时。
LinkedList在插入和删除元素时性能较好,因为它只需要调整节点的引用,而不涉及数组的拷贝。
空间复杂度:
ArrayList在存储元素时可能会分配一定的冗余空间,因为它需要预留一些额外的空间,以应对元素的动态增长。
LinkedList的空间利用率相对较高,因为它只存储元素和节点之间的引用。
迭代性能:
ArrayList通过迭代器(Iterator)在元素之间移动的速度更快。
LinkedList通过指针在节点之间移动的速度更快。
综上所述,如果需要频繁进行随机访问或迭代操作,且对内存占用不太敏感,可以选择ArrayList。如果需要频繁进行插入、删除或在两端进行操作,并且对内存占用敏感,可以选择LinkedList。