Java List 集合

怀旧网个人博客网站地址:怀旧网,博客详情:Java List 集合

List 集合的特点

List 集合的特有方法

因为List是Collection 的子类,所以List也直接继承了所有的Collection 的方法。

List 集合方法代码测试

创建集合对象

因为List也是接口,所以同样不能直接对List进行实例化-这里还是使用ArrayList子类来进行实例化

复制代码
public static void main(String[] args){
    List<Student> list = new ArrayList<>();
}

add方法

复制代码
public static void main(String[] args){
    List<Student> list = new ArrayList<>();

    list.add(new Student("cat", 1));
    list.add(new Student("age", 2));
    list.add(1, new Student("age", 2));

    System.out.println(list);
}

​ 这边第一次和第二次的添加方式实际上是使用的父类Collection的add方法,但是在第三行添加方法才是使用List自己特有的添加方法。

复制代码
public static void main(String[] args){
    List<Student> list = new ArrayList<>();

    list.add(1, new Student("age", 2));

    System.out.println(list);
}

注意:在使用List的add方法时直接添加数据的时候,索引的位置上面的前一个位置必须有元素,要是没有就会报错IndexOutOfBoundsException。


remove方法

List 中的remove方法通过下标进行元素删除,当元素被删除后-要是删除成功会返回删除后的元素。

复制代码
public static void main(String[] args){
    List<Student> list = new ArrayList<>();

    list.add(new Student("cat", 1));
    list.add(new Student("age", 2));
    list.add(1, new Student("age", 2));

    list.remove(1);

    System.out.println(list);
}

List 自己的remo方法,是直接删除下标所在位置的元素。

复制代码
public static void main(String[] args){
    List<Student> list = new ArrayList<>();

    list.add(new Student("cat", 1));
    list.add(new Student("age", 2));
    list.add(1, new Student("age", 2));

    list.remove(3);

    System.out.println(list);
}

注意:在使用删除的时候,要是索引位置超出了当前属于总长度的大小,就会报错IndexOutOfBoundsException。

remove方法删除int类型测试

复制代码
public static void main(String[] args){
    List<Integer> list = new ArrayList<>();

    list.add(1);
    list.add(2);
    list.add(3);

    list.remove(1);

    System.out.println(list);
}

在删除int类型的数据时:只能够删除下标的元素,而不是删除指定值的元素-如果想删除指定值,可以通过下面的方式实现:

复制代码
public static void main(String[] args){
    List<Integer> list = new ArrayList<>();

    list.add(1);
    list.add(2);
    list.add(3);

    list.remove(new Integer(1));

    System.out.println(list);
}

这里是创建一个Integer的对象来进行删除,就可以实现删除指定元素值的删除。


set 方法

在执行成功set方法后,会返回被修改后的元素数据。

复制代码
public static void main(String[] args){
    List<Student> list = new ArrayList<>();

    list.add(new Student("cat", 1));
    list.add(new Student("age", 2));
    list.add(1, new Student("age", 2));

    list.set(1, new Student("aa", 12));

    System.out.println(list);
}

方法作用是修改当前的索引位置的值。

注意:当修改位置索引大于当前元素最大下标时同上也会报错IndexOutOfBoundsException-这边就不做演示了。


get 方法

复制代码
public static void main(String[] args){
    List<Student> list = new ArrayList<>();

    list.add(new Student("cat", 1));
    list.add(new Student("age", 2));
    list.add(1, new Student("age", 2));

    System.out.println(list.get(1));
}

get 方法是用来获取当前下标位置的元素,同理当下标元素大小超过元素最大下标同样会报错IndexOutOfBoundsException

List 集合的遍历方式

以上就是List集合的5种遍历方式--在Collection中实现过其中的三种,可以参考:网页链接

列表迭代器遍历

和Collection 方法一样可以进行迭代输出--注意获取迭代器对象的时候是调用listIterator()方法。。

复制代码
public static void main(String[] args){
    List<Integer> list = new ArrayList<>();

    list.add(1);
    list.add(2);
    list.add(3);

    ListIterator<Integer> iterator = list.listIterator();

    while (iterator.hasNext()){
        Integer data = iterator.next();
        System.out.println(data);
    }
}

重点介绍新增的方法:

previous 和 hasPrevious 方法

作用: 可以实现让指针像前移,可以实现倒序的遍历

复制代码
public static void main(String[] args){
    List<Integer> list = new ArrayList<>();

    list.add(1);
    list.add(2);
    list.add(3);

    ListIterator<Integer> iterator = list.listIterator();

    while (iterator.hasNext()){
        Integer data = iterator.next();
        System.out.println(data);
    }

    System.out.println("=================");

    while (iterator.hasPrevious()){
        Integer data = iterator.previous();
        System.out.println(data);
    }
}

注意:和next方法一样,当指针在起始位置时调用previous方法就会发生报错(因为当前指针的前一个位置是没有数据的)

复制代码
public static void main(String[] args){
    List<Integer> list = new ArrayList<>();

    list.add(1);
    list.add(2);
    list.add(3);

    ListIterator<Integer> iterator = list.listIterator();
    Integer data = iterator.previous();
}

新增add方法-和Collection一样需要用迭代器进行添加方法例如:

复制代码
public static void main(String[] args){
    List<Integer> list = new ArrayList<>();

    list.add(1);
    list.add(2);
    list.add(3);

    ListIterator<Integer> iterator = list.listIterator();

    while(iterator.hasNext()){
        Integer data = iterator.next();

        if(data.equals(1)){
            iterator.add(4);
        }
    }

    System.out.println(list);
}

同理,在迭代途中使用list的add方法同样会报错

复制代码
public static void main(String[] args){
    List<Integer> list = new ArrayList<>();

    list.add(1);
    list.add(2);
    list.add(3);

    ListIterator<Integer> iterator = list.listIterator();

    while(iterator.hasNext()){
        Integer data = iterator.next();

        if(data.equals(1)){
            list.add(4);
        }
    }

    System.out.println(list);
}

删除方法也同Collection一样

复制代码
public static void main(String[] args){
    List<Integer> list = new ArrayList<>();

    list.add(1);
    list.add(2);
    list.add(3);

    ListIterator<Integer> iterator = list.listIterator();

    while(iterator.hasNext()){
        Integer data = iterator.next();

        if(data.equals(1)){
            iterator.remove();
        }
    }

    System.out.println(list);
}

普通for循环遍历

复制代码
public static void main(String[] args){
    List<Integer> list = new ArrayList<>();

    list.add(1);
    list.add(2);
    list.add(3);

    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
    }
}

List 遍历总结

相关推荐
打工仔折腾 AI2 分钟前
LLaMA 1 到 LLaMA 3 架构演进拆解:从 RoPE、GQA 到词表扩张
人工智能·后端·python·深度学习·langchain·llama
如意猴8 分钟前
【C++】007 C/C++ 内存管理机制、malloc与new的区别及模板初阶
java·c++·算法
可乐鸡翅yeah_18 分钟前
HLS 分片过期清理,直播旧 TS 分片磁盘爆满问题处理
java·后端·spring·m3u8·m3u8在线·音视频在线播放
张彦峰ZYF36 分钟前
加了锁不等于扛得住争用:synchronized、显式锁与 CAS 的语义分层、争用代价账本与选型判据
后端·同步设施·内置锁的四种状态与单向升级·可重入的由来与四条硬边界·显式锁的状态字段与等待队列·读写锁与邮戳锁·一次同步的开销账本
专业程序开发源1 小时前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
Gopher_HBo1 小时前
zap采样器与性能优化内幕
后端
变量探索SEQVEC1 小时前
我埋了 8 个假文件,看谁会上钩:12 天 502 次扫描实录
后端
用户094248568031 小时前
第23章:OpenJDK逃逸分析、标量替换与锁优化
java·jvm
llqbzllll1 小时前
HashMap 的核心结构:从一次 put 看到扩容、桶迁移与树化边界
后端
wuminyu1 小时前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++