浅谈LinkedList
首先呢我们来说说何为LinkedList,通过这个名字呢,我们不难看出,这是啷个单词的合成词,也就是Link 和List,别纠结我为什么不说是Linked好吧!Link呢是链接的意思,List呢是列表,连起来很形象的可以想象到用绳子将一张张表连起来,当你拿到一串连起来的列表中的一张时,那你肯定通过绳子知道上一张列表和下一张列表。通过上面我的剖析,总结一下,这个集合就是一个以双向链表数据结构构成的有序的集合
集合元素的创建
LinkedList list = new LinkedList();
LinkedList<String>list2 =new LinkedList<>();
创建LinkedList有两种创建方法,一种是无泛型的,如以上第一种,它可以存放任意数据类型;还有一种就是有泛型的,如第二种,在尖括号类写你要规定的类型,比如Integer、String、以及自定义数据类的数据类型,如Student、Car、Teacher、Worker等等,当规定了泛型之后,你定义的这个集合就只能存放一种数据类型。
添加元素
这里以没有使用泛型的为例:
list.add("林俊杰");
list.add(666);//自动装箱Integer.valueOf(666);
list.add('M');//自动装箱Character.valueOf('M');
list.add(false);//自动装箱Boolean.valueOf(false);
list.add('M');
list.add(1, "欧阳娜拉");//指定下标上增加
Collections.addAll(list, "王力宏","王丽坤","王宝强","王源");//利用集合工具类批量添加
- 获取集合长度
System.out.println("集合长度:"+list.size());
- 获取元素与下标
System.out.println("下标为1的元素是:"+list.get(1));
System.out.println("获取对应元素的第一个下标:"+list.indexOf('M'));
System.out.println("获取对应元素的最后一个下标:"+list.lastIndexOf('M'));
- 删除元素
System.out.println("根据下标删除元素:"+list.remove(4));
System.out.println("根据元素删除,成功返回true,失败返回false:"+list.remove(false));
使用泛型的集合可以使用过滤器删除
System.out.println("根据过滤器删除元素:");
list2.removeIf(new Predicate<String>() {
@Override
public boolean test(String str) {
// TODO Auto-generated method stub
if(str.equals("小红帽")) {
return true;
}
return false;
}
});
- 取交集:返回交集部分的元素集合
list2.retainAll(list);
- 删除交集:list2与list取交集后,返回list2-交集的部分,也就是说返回除了交集的list2的剩余元素,谁去调用返回谁的结合剩余元素
list2.removeAll(list);
- 删除所有元素:清除集合中所有的元素
list.clear();
- 判断集合是否为空:为空返回true,不为空返回false。
!list3.isEmpty()
遍历元素
- 普通for循环遍历
System.out.println("第一种方式:for循环");
for (int i = 0; i < list2.size(); i++) {
System.out.println(list2.get(i));
}
2.增强for循环遍历
System.out.println("第二种遍历,增强for循环,foreach");
for (Object object : list2) {
System.out.println(object);
}
- 迭代器遍历
System.out.println("第三种遍历方式,迭代器");
Iterator it2 =list2.iterator();
while(it2.hasNext()) {
System.out.println(it2.next());
}
测试所写代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.function.Predicate;
import javax.xml.transform.Source;
public class LinkedListTest {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add("林俊杰");
list.add(666);//自动装箱Integer.valueOf(666);
list.add('M');//自动装箱Character.valueOf('M');
list.add(false);//自动装箱Boolean.valueOf(false);
list.add('M');
list.add(1, "欧阳娜拉");//指定下标上增加
Collections.addAll(list, "王力宏","王丽坤","王宝强","王源");//利用集合工具类批量添加
System.out.println("集合长度:"+list.size());
System.out.println("下标为1的元素是:"+list.get(1));
System.out.println("获取对应元素的第一个下标:"+list.indexOf('M'));
System.out.println("获取对应元素的最后一个下标:"+list.lastIndexOf('M'));
System.out.println("根据下标删除元素:"+list.remove(4));
System.out.println("根据元素删除,成功返回true,失败返回false:"+list.remove(false));
//遍历
//第一种方式:for循环
System.out.println("第一种方式:for循环");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
//第二种遍历,增强for循环,foreach
System.out.println("第二种遍历,增强for循环,foreach");
for (Object object : list) {
System.out.println(object);
}
//第三种遍历方式,迭代器
System.out.println("第三种遍历方式,迭代器");
Iterator it =list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
// 增加泛型,可以使用过滤器删除元素,迭代器删除指定元素将会删除集合中所有该元素
LinkedList<String>list2 =new LinkedList<>();
list2.add("林俊杰");
list2.add("田馥甄");
list2.add("林俊杰");
list2.add("佟丽娅");
list2.add("迪丽热巴");
list2.add("冯绍峰");
list2.add(1, "欧阳娜拉");
//批量添加
list.addAll(list2);
System.out.println("通过批量添加list2后的list:"+list.toString());
System.out.println("根据过滤器删除元素:");
list2.removeIf(new Predicate<String>() {
@Override
public boolean test(String str) {
// TODO Auto-generated method stub
if(str.equals("林俊杰")) {
return true;
}
return false;
}
});
//遍历
//第一种方式:for循环
System.out.println("第一种方式:for循环");
for (int i = 0; i < list2.size(); i++) {
System.out.println(list2.get(i));
}
//第二种遍历,增强for循环,foreach
System.out.println("第二种遍历,增强for循环,foreach");
for (Object object : list2) {
System.out.println(object);
}
//第三种遍历方式,迭代器
System.out.println("第三种遍历方式,迭代器");
Iterator it2 =list2.iterator();
while(it2.hasNext()) {
System.out.println(it2.next());
}
//取交集
list2.retainAll(list);
System.out.println(list2);
//删除交集
list2.removeAll(list);
list2.add("张杰");
System.out.println(list2);
//清空
System.out.println(list);
list.clear();
System.out.println(list);
//先进先出
LinkedList<Integer> list3 = new LinkedList<>();
list3.add(1);
list3.add(2);
list3.add(3);
list3.add(4);
list3.add(5);
while(!list3.isEmpty()) {
Integer integer =list3.removeFirst();
System.out.println(integer);
}
// 队列模式(先进先出)
System.out.println("被循环删除第一个元素后的长度"+list3.size());
list3.add(1);
list3.add(2);
list3.add(3);
list3.add(4);
list3.add(5);
// 栈模式(先进后出)
while(!list3.isEmpty()) {
Integer integer1 = list3.removeLast();
System.out.println(integer1);
}
System.out.println("被循环删除最后一个元素后的长度"+list3.size());
}
}
提示
以上只是我自己的看法,如有相同纯属意外。如有错误,也请谅解,勿喷!如有收获或疑问,欢迎点赞评论!