一、介绍
链表(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