集合List理解与使用

一、集合的好处

  • 可以动态保存任意多个对象,使用比较方便
  • 提供了一系列方便的操作对象:add、remove、set、get等
  • 使用集合添加,删除新元素的示意代码简洁明了

二、集合的框架体系

Collection集合体系
Collection借口有两个重要的子借口List 和Set,他们的实现子类都是单列集合
在这里插入图片描述
Map集合
Map接口的实现子类是双列集合,存放的K-V存放键值对
在这里插入图片描述

二、Collection

Collection接口实现类的特点

  • Collection实现子类可以存放多个元素,每个元素可以是Object
  • 有些Collection的实现类,可以存放重复的元素,有些不可以
  • 有些Collection的实现类,有些是有序的(List),有些不是有序的(Set)
  • Collection接口没有直接的实现子类,是通过它的子接口Set和List来实现的

Collection接口和常用方法

以ArrayList来演示

add

add也可以()内输入index,Object obj来把要放入的数据插入index位置

public class Collection01 {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("jack");
        list.add(10);
        list.add(true);
        System.out.println(list);//[jack, 10, true]
    }
}

remove(int index)

index表示要删除的元素位置,还有一种选择删除的对象,返回的是boolean值;也可以指定删除某个值

public class Collection01 {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("jack");
        list.add(10);
        list.add(true);
        System.out.println(list);//[jack, 10, true]
        list.remove(0);//表示删除第一个元素
        System.out.println(list);//[10, true]
    }
}

contains()

寻找是否存在返回boolean值

public class Collection01 {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("jack");
        list.add(10);
        list.add(true);
        System.out.println(list);
//        list.remove(0);//表示删除第一个元素
//        System.out.println(list);
        System.out.println(list.contains(10));//true
    }
}

size()

用来返回集合中元素的个数

public class Collection01 {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("jack");
        list.add(10);
        list.add(true);
        System.out.println(list);
        System.out.println(list.size());//3
//        list.remove(0);//表示删除第一个元素
//        System.out.println(list);
//        System.out.println(list.contains(10));
    }
}

isEmpty()

//判断集合是否为空返回boolean值

public class Collection01 {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("jack");
        list.add(10);
        list.add(true);
        System.out.println(list);
        System.out.println(list.isEmpty());//false
//        System.out.println(list.size());
//        list.remove(0);//表示删除第一个元素
//        System.out.println(list);
//        System.out.println(list.contains(10));
    }
}

clean()

清空数组

public class Collection01 {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("jack");
        list.add(10);
        list.add(true);
        System.out.println(list);
        list.clear();//[]
//        System.out.println(list.isEmpty());
//        System.out.println(list.size());
//        list.remove(0);//表示删除第一个元素
//        System.out.println(list);
//        System.out.println(list.contains(10));
    }
}

addAll(),containsAll(),removeAll()

这三个形参都是集合对象
add也可以()内输入index,Object objs来把要放入的数据插入index位置

public class Collection01 {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        List list = new ArrayList();
        List list2 = new ArrayList();
        list2.add("jack");
        list2.add("rose");
        list.addAll(list2);
        System.out.println(list);//[jack, rose]
        System.out.println(list.containsAll(list2));//true
        list.removeAll(list2);
        System.out.println(list);//[]
    }
}

Collection接口遍历元素的方式

使用iterator迭代器

在这里插入图片描述

  • iterator对象称为迭代器,主要用于遍历Collection集合中的元素
  • 所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了lterator接口的对象,即可以返回一个迭代器
  • iterator的结构
  • iterator仅用于遍历集合,本身并不存放对象

lterator接口的方法

  • hasnext()返回boolean值判断下一个是否还有值
  • next()返回下一个元素
  • 在用next()前一定要先判断hasnext()不然如果下一个没有值则会抛出NoSuchElementException异常
public class Iterator01 {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
       Collection col = new ArrayList();
       col.add(new Book("三国演义","罗贯中",10.1));
       col.add(new Book("小李飞刀","古龙",5.1));
       col.add(new Book("红楼梦","曹雪芹",34.6));
        //System.out.println(col);
        //遍历集合
        //1.先得到col对应的迭代器
        Iterator iterator = col.iterator();
        while(iterator.hasNext()){
            //返回下一个元素,类型是Object
            Object obj = iterator.next();
            System.out.println(obj);
        }
        //快捷键itit加回车

    }
}

当退出while循环后,迭代器指针指向最后一个元素
如果希望再次遍历则需要重置迭代器
iterator = col.iterator();

增强for循环

就是简化版的iterator迭代器只能用于遍历数组或集合
在这里插入图片描述

public class For {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Collection col = new ArrayList();
        col.add(new Book("三国演义","罗贯中",10.1));
        col.add(new Book("小李飞刀","古龙",5.1));
        col.add(new Book("红楼梦","曹雪芹",34.6));
        for (Object obj : col){
            System.out.println(obj);
        }
        //快捷键输入I
    }
}

二、List接口

List接口基本介绍

List接口是Collection接口的子接口

  • List集合类中元素有序(即添加顺序和取出顺序一致)、且可以重复
  • List集合中的每一个元素都有其对应的顺序索引,即支持索引。
  • List容器中的每一个元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素
  • JDK API 中List接口的实现类有
    在这里插入图片描述
    常用的有ArrayList、LinkedList和Vector

List方法补充

indexOf()和lastIndexOf()

索引找到括号内元素出现的第一个位置

last表示最后一个出现的位置

public class List01 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("jack");
        list.add("j");
        list.add("tom");
        list.add(1);
        System.out.println(list.indexOf("tom"));//2

    }
}

remove()

表示删除下标位置的元素

public class List01 {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("jack");
        list.add("j");
        list.add("tom");
        list.add(1);
        System.out.println(list.indexOf("tom"));//2
        list.remove(0);
        System.out.println(list);//[j, tom, 1]
    }
}

set(int index , obj)

表示在index位置将原来元素改为你输入的元素

public class List01 {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("jack");
        list.add("j");
        list.add("tom");
        list.add(1);
        list.set(1,"ss");
        System.out.println(list);//[jack, ss, tom, 1]
    }
}

subList(int fromindex,int toindex)

表示索引从fromindex位置到toindex位置但是toindex位置不取左闭右开

public class List01 {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("jack");
        list.add("j");
        list.add("tom");
        list.add(1);
        System.out.println(list.subList(0,2));//[jack, j]
    }
}

三、ArrayList底层结构和源码分析

ArrayList的注意事项

  • 可以加入所有元素,null也可以加入并且多个
  • ArrayList是由数组来实现数据存储的
  • ArrayList基本等同于Vector,除了ArrayList是线程不安全(执行效率高)看源码。在多线程情况下,不建议使用ArrayList

ArrayList的底层操作机制源码分析

在这里插入图片描述
transient表示属性不会被序列化
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

四、Vector底层结构和源码分析

Vector基本介绍

在这里插入图片描述

Vector和ArrayList的比较

在这里插入图片描述

五、LinkedList底层

LinkedList基本介绍

在这里插入图片描述

LinkedList底层操作机制

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Milisira

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值