JavaSE——List集合
Posted javaHane
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE——List集合相关的知识,希望对你有一定的参考价值。
List集合的实现类
List集合子类的特点
-
ArrayList集合
底层是数组结构实现,查询快、增删慢
-
LinkedList集合
底层是链表结构实现,查询慢、增删快
LinkedList集合的特有功能
-
特有方法
方法名 说明 public void addFirst(E e) 在该列表开头插入指定的元素 public void addLast(E e) 将指定的元素追加到此列表的末尾 public E getFirst() 返回此列表中的第一个元素 public E getLast() 返回此列表中的最后一个元素 public E removeFirst() 从此列表中删除并返回第一个元素 public E removeLast() 从此列表中删除并返回最后一个元素 -
示例代码
package com.zhao.list; import java.util.LinkedList; public class ListDemo1 public static void main(String[] args) //想要使用LinkedList的独有功能不能用多态写法 //LinkedList可以完成队列结构和栈结构(双链表),拥有特有的功能 //栈:先入后出,后入先出 //栈中每次添加的元素应该加在开头,像压栈一样把旧的压下去 LinkedList<String> stack = new LinkedList<>(); //1.添加元素到开头.addFirst() 压栈/入栈 stack.addFirst("第一个入栈的"); stack.addFirst("第二个入栈的"); stack.addFirst("第三个入栈的"); System.out.println(stack); //-->[第三个入栈的, 第二个入栈的, 第一个入栈的] //2.从此列表中删除并返回第一个元素.removeFirst 出栈/弹栈 System.out.println(stack.removeFirst());//-->第三个入栈的 System.out.println(stack.removeFirst());//-->第二个入栈的 System.out.println(stack.removeFirst());//-->第一个入栈的 System.out.println(stack);//-->[] //队列:先入先出,后入后出 //队列中的元素每次添加应该加在末尾,像排队一样 //3.添加元素到末尾 .addLast() 入队 LinkedList<String> queue = new LinkedList<>(); queue.addLast("排1号的"); queue.addLast("排2号的"); queue.addLast("排3号的"); System.out.println(queue); //-->[排1号的, 排2号的, 排3号的] //出队 System.out.println(queue.removeFirst());//-->排1号的 System.out.println(queue.removeFirst());//-->排2号的 System.out.println(queue.removeFirst());//-->排3号的 System.out.println(queue);//-->[]
删除List集合中的重复元素
package com.zhao.list;
import java.util.ArrayList;
import java.util.Iterator;
public class ListDemo2
public static void main(String[] args)
//删除List集合中的重复元素
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("bbb");
list.add("ccc");
list.add("ddd");
System.out.println(list);//-->[aaa, bbb, bbb, ccc, ddd]
//删除所有bbb的元素
/*
不能用remove删,因为remove只能删相同元素的第一个
list.remove("bbb");
System.out.println(list);//-->[aaa, bbb, ccc, ddd]
*/
//用迭代器删除
/*Iterator<String> it = list.iterator();
while (it.hasNext())
String ele=it.next();
if ("bbb".equals(ele))
//使用迭代器删除
it.remove();
System.out.println(list);//-->[aaa, ccc, ddd]
*/
//增强for删除
/*for (String s : list)
if ("bbb".equals(s))
list.remove("bbb");
System.out.println(list);*/
//-->Exception in thread "main" java.util.ConcurrentModificationException
//报错并发异常 因为list在删除掉第一个bbb的时候集合长度变短了,有可能会跳过接下来的一个元素
//同理lambda表达式的forEach也不可以边遍历边删除
//for循环删除
//不报并发异常,但是会漏删,与之前原因相同
//但是有解决办法,第一种就是从后往前删
//第二种,正序进行删除后将i向后减1
for (int i = 0; i < list.size(); i++)
String ele=list.get(i);
if ("bbb".equals(ele))
list.remove("bbb");
i--;
System.out.println(list);//-->[aaa, ccc, ddd]
以上是关于JavaSE——List集合的主要内容,如果未能解决你的问题,请参考以下文章
JavaSE-14.2.1List集合的特点特有方法遍历方式
javaSE (十五)对象数组集合(Collection)集合(List)
JavaSE-14.2.2案例-List集合存储学生对象并遍历