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集合存储学生对象并遍历

JavaSE学习总结—— 集合

JavaSE基础八----<集合>List接口及其实现类,List接口的迭代

JavaSE 集合补充点(JDK1.9对集合添加的优化)