一、介绍
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。链表可分为单向链表和双向链表。
LinkedList和ArrayList的区别
Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。
与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。
以下情况使用 ArrayList :
- 频繁访问列表中的某一个元素。
- 只需要在列表末尾进行添加和删除元素操作。
以下情况使用 LinkedList :
- 你需要通过循环迭代来访问列表中的某些元素。
- 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
二、添加元素
方法:add()
代码:
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("1");
list.add("2");
list.add("3");
System.out.println(list);
}
运行结果:
[1, 2, 3]
三、获取元素
方法:get()
代码:
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("1");
list.add("2");
list.add("3");
String s1 = list.get(0);
String s2 = list.get(1);
String s3 = list.get(2);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
运行结果:
1
2
3
四、迭代元素
方法:for foreach()
代码:
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("1");
list.add("2");
list.add("3");
for (int i = 0 ;i<list.size();i++){
System.out.println("普通for循环-----"+list.get(i));
}
for (String s : list) {
System.out.println("for循环-----"+s);
}
list.forEach(r->{
System.out.println("forEach-----"+r);
});
}
运行结果:
普通for循环-----1
普通for循环-----2
普通for循环-----3
for循环-----1
for循环-----2
for循环-----3
forEach-----1
forEach-----2
forEach-----3
五、元素添加到头部
方法:addFirst(E e)
代码:
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("1");
list.add("2");
list.add("3");
System.out.println("添加前---"+list);
list.addFirst("4");
System.out.println("添加后---"+list);
}
运行结果:
添加前---[1, 2, 3]
添加后---[4, 1, 2, 3]
六、元素添加到尾部
方法:addLast(E e)
代码:
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("1");
list.add("2");
list.add("3");
System.out.println("添加前---"+list);
list.addLast("4");
System.out.println("添加后---"+list);
}
运行结果:
添加前---[1, 2, 3]
添加后---[1, 2, 3, 4]
七、清空链表
方法: clear()
代码:
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("1");
list.add("2");
list.add("3");
list.clear();
System.out.println(list);
}
运行结果:
[ ]
八、删除指定位置的元素
方法: remove(int index)
代码:
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("1");
list.add("2");
list.add("3");
System.out.println("删除前---"+list);
list.remove(0);
System.out.println("删除后---"+list);
}
运行结果:
删除前---[1, 2, 3]
删除后---[2, 3]
九、查找指定元素从前往后第一次出现的索引
方法:indexOf()
代码:
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("1");
list.add("1");
list.add("2");
list.add("2");
list.add("3");
list.add("3");
list.add("3");
int i = list.indexOf("1");
System.out.println(i);
}
运行结果:
0
十、克隆列表
方法:clone()
代码:
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("1");
list.add("2");
list.add("3");
System.out.println("创建的list-----"+list);
Object clone = list.clone();
System.out.println("复制的list-----"+clone);
}
运行结果:
创建的list-----[1, 2, 3]
复制的list-----[1, 2, 3]
十一、返回链表元素个数
方法:size()
代码:
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("1");
list.add("2");
list.add("3");
int size = list.size();
System.out.println(size);
}
运行结果:
3









