List接口与实现类详细释义与代码

19 篇文章 0 订阅

List接口与实现类

List子接口

  • 特点:有序、有下标、元素可以重复。

  • 方法:

    • void add(int index,Object o) // 在index位置插入对象o。
    • boolean addAll(int index,Collection c) // 将一个集合中的元素添加到此集合中的index位置。
    • Object get(int index) // 返回集合中指定位置的元素。
    • List subList(int fromIndex, int toIndex) // 返回fromIndex和toIndex之间的集合元素。
  • 实例:

    public class Listdemo01 {
        public static void main(String[] args) {
    
            // 先创建集合对象
            List li = new ArrayList();
            // 添加元素
            System.out.println("---------添加---------");
            li.add("苹果");
            li.add("小米");
            // 可以给添加的值指定下标位置
            li.add(0,"华为");
            System.out.println("元素个数:"+li.size());
            System.out.println(li.toString());
            // 删除元素 可以根据值删除 也可以根据下标删除
    //      li.remove("小米");
    //      li.remove(0);
    //      System.out.println("元素个数:"+li.size());
    //      System.out.println(li.toString());
            // 遍历
            // 使用for遍历
            System.out.println("---------使用for遍历---------");
            for (int i = 0; i < li.size(); i++) {
                System.out.println(li.get(i));
            }
            // 使用增强for
            System.out.println("---------使用增强for遍历---------");
            for (Object o : li){
                System.out.println(o);
            }
            // 使用迭代器
            Iterator it = li.iterator();
            System.out.println("---------使用迭代器遍历---------");
            while (it.hasNext()){
                System.out.println(it.next());
            }
            // 使用列表迭代器,和Iterator的区别,ListIterator可以向前或向后遍历、添加、删除、修改元素。
            ListIterator lit = li.listIterator();
            System.out.println("---------使用迭代器从前往后遍历---------");
            while (lit.hasNext()){
                System.out.print(lit.nextIndex());// 遍历下标
                System.out.println(lit.next());// 遍历值
            }
            System.out.println("---------使用迭代器从后往前遍历---------");
            while(lit.hasPrevious()){
                System.out.println(lit.previousIndex()+":"+lit.previous());
            }
            // 判断
            System.out.println("---------判断---------");
            System.out.println(li.contains("小米"));
            System.out.println(li.isEmpty());
            // 获取位置
            System.out.println("---------获取值位置(下标)---------");
            System.out.println(li.indexOf("华为"));
    
        }
    }
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vIcHCKCc-1611137958660)(D:\学习\tupian\集合框架\list\l.png)]

  • 实例2:

    // 创建集合
    List list = new Arraylist();
    // 添加数字数据(自动装箱)
    list.add(20);
    list.add(30);
    list.add(40);
    list.add(50);
    list.add(60);
    System.out.println("元素个数:"+list.size());
    System.out.println(list.toString());
    // 删除操作
    // list.remove(0); // 根据下标
    list.remove((Object)20);
    System.out.println("删除元素:"+list.size());
    System.out.println(list.toString());
    
    // subList 返回子集合 含头不含尾
    list.subList(1,3);
    System.out.println(list.size());
    System.out.println(list.toString());
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3FJw84Ku-1611137958665)(D:\学习\tupian\集合框架\list\i.png)]

  • ArrayList【重点】:

    • 数组结构实现,查询快、增删慢;
    • JDK1.2版本,运行效率快、线程不安全。
  • Vector:

    • 数组结构实现,查询快、增删慢;
    • JDK1.0 版本,运行效率慢、线程安全。
  • LinkedList:

    • 链表结构实现,增删快,查询慢。

ArrayList的使用

  • 存储结构:数组,查找遍历速度快,增删速度慢

  • 实例:

    // 创建集合
    ArrayList arrayList = new ArrayList();
    // 添加元素
    Student s1 = new Student("周杰伦",41);
    Student s2 = new Student("薛之谦",37);
    Student s3 = new Student("林俊杰",39);
    arrayList.add(s1);
    arrayList.add(s2);
    arrayList.add(s3);
    System.out.println("元素个数:"+arrayList.size());
    System.out.println(arrayList.toString());
    // 删除元素
    arrayList.remove(s3);
    System.out.println("删除之后"+arrayList.size());
    // 遍历元素【重点】
    // 3.1使用迭代器
    System.out.println("-----3.1使用迭代器-----");
    Iterator it = arrayList.iterator();
    while(it.hasNext()){
        Student s = (Student)it.next();
        System.out.println(s.toString());
    }
    // 3.2使用列表迭代器
    ListIterator lit = arrayList.listIterator();
    System.out.println("-----3.2使用列表迭代器-----");
    while(lit.hasNext()){
        Student s = (Student)it.next();
        System.out.println(s.toString());
    }
    System.out.println("-----3.2使用列表迭代器逆序-----");
    while(lit.hasPrevious()){
        Student s = (Student)it.previous();
        System.out.println(s.toString());
    }
    // 判断
    System.out.println(arrayList.contains(new Student("薛之谦",37)));
    System.out.println(arrayList.isEmpty());
    // 查找
    System.out.println(arrayList.indexOf(new Student("薛之谦",37)));
    // 删除元素
    arrayList.remove(new Student("林俊杰",39));
    System.out.println("删除之后"+arrayList.size());
    
    // 我们重写equals判断,使arrayList.remove(new Student("林俊杰",39));比较的是里面的值而不是地址。
    @Override
    public boolean equals(Object obj){
        // 判断是不是同一个对象
        if(this == obj){
            return true;
        }
        // 判断是否为空
        if(obj == null){
            return false;
        }
        // 判断是否是Student类型
        if(obj instanceof Student){
            Student s = (Student)obj;
            // 比较属性
            if(this.name.equals(s.getName()) && this.age==s.getAge()){
                return true;
            }
        }
        // 不满足条件返回false
        return false;
    }
    
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JKNtgMbt-1611137958669)(D:\学习\tupian\集合框架\ArrayList\arr.png)]

List实现类

  • ArrayList【重点】:

    • 数组结构实现,查询快、增删慢;
    • JDK1.2版本,运行效率快、线程不安全。
  • Vector:

    • 数组结构实现,查询快、增删慢;
    • JDK1.0版本,运行效率慢、线程安全。
  • 实例:

    public class Vectortest {
        public static void main(String[] args) {
            // 创建集合
            Vector vector = new Vector();
            // 添加元素
            System.out.println("------添加------");
            vector.add("草莓");
            vector.add("芒果");
            vector.add("西瓜");
            System.out.println("元素个数:"+vector.size());
            // 删除
            // vector.remove(0); // 可以根据下标删除
            // vector.remove("西瓜"); // 也可以根据值删除
            // .clear() 删除全部
            System.out.println(vector.toString());
            // 遍历
            System.out.println("------使用枚举器------");
            Enumeration en = vector.elements();
            while(en.hasMoreElements()){
                String o = (String)en.nextElement();
                System.out.println(o);
            }
          // 判断
            System.out.println("------判断------");
            System.out.println("判断西瓜在不在集合里:"+vector.contains("西瓜"));
            System.out.println("判断集合是否为空:"+vector.isEmpty());
    
        }
    }
    
  • LinkedList:

  • 链表结构实现,增删快,查询慢。可重复

    • 实例:
    public class LinkedListTest {
        public static void main(String[] args) {
            // 创建集合
            LinkedList linkedList = new LinkedList();
            Student s1 = new Student("刘德华",20);
            Student s2 = new Student("郭富城",22);
            Student s3 = new Student("梁朝伟",18);
            linkedList.add(s1);
            linkedList.add(s2);
            linkedList.add(s3);
            System.out.println("元素个数:"+linkedList.size());
            System.out.println(linkedList.toString());
            // 删除元素 .clear()全部删除
    //        linkedList.remove(new Student("刘德华",20));
    //        System.out.println("删除之后:"+linkedList.size());
    //        System.out.println(linkedList.toString());
            // 遍历
            System.out.println("------for------");
            for (int i = 0; i < linkedList.size(); i++) {
                System.out.println(linkedList.get(i));
            }
            System.out.println("------增强for------");
            for(Object object : linkedList){
                Student s = (Student)object;
                System.out.println(s.toString());
            }
            System.out.println("------迭代器------");
            Iterator it = linkedList.iterator();
            while(it.hasNext()){
                Student s = (Student)it.next();
                System.out.println(s.toString());
            }
            ListIterator lit = linkedList.listIterator();
            while(lit.hasNext()){
                Student s = (Student)lit.next();
                System.out.println(s.toString());
            }
            // 判断
            System.out.println("------判断------");
            System.out.println(linkedList.contains(s1));
            System.out.println(linkedList.isEmpty());
            // 获取下标
            System.out.println("------获取下标------");
            System.out.println(linkedList.indexOf(s1));
    
        }
    }
    
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v46TxG1F-1611137958680)(D:\学习\tupian\集合框架\list\linkedlist.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-609K0BlS-1611137958684)(D:\学习\tupian\集合框架\集合\q.png)]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值