Java集合----LinkedList

浅谈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, "王力宏","王丽坤","王宝强","王源");//利用集合工具类批量添加
  1. 获取集合长度
System.out.println("集合长度:"+list.size());
  1. 获取元素与下标
System.out.println("下标为1的元素是:"+list.get(1));
System.out.println("获取对应元素的第一个下标:"+list.indexOf('M'));
System.out.println("获取对应元素的最后一个下标:"+list.lastIndexOf('M'));
  1. 删除元素
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;
			}
		});
  1. 取交集:返回交集部分的元素集合
list2.retainAll(list);
  1. 删除交集:list2与list取交集后,返回list2-交集的部分,也就是说返回除了交集的list2的剩余元素,谁去调用返回谁的结合剩余元素
list2.removeAll(list);
  1. 删除所有元素:清除集合中所有的元素
list.clear();
  1. 判断集合是否为空:为空返回true,不为空返回false。
!list3.isEmpty()

遍历元素

  1. 普通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);
	}
  1. 迭代器遍历
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());
	}
}

提示

以上只是我自己的看法,如有相同纯属意外。如有错误,也请谅解,勿喷!如有收获或疑问,欢迎点赞评论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值