Java中的容器类(二):List接口下的ArrayList、Vector容器类的介绍和使用

本文详细介绍了ArrayList和Vector容器类在Java中的关键操作,包括添加、获取、删除、替换元素,判断空/包含,查找位置,转换为数组及集合运算。特别展示了如何通过实例演示这些功能,并讨论了两者在线程安全性和效率上的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.ArrayList容器类

1.1添加元素

1.2获取元素

1.3删除元素

1.4替换元素

1.5清空容器

1.6判断容器是否为空 

1.7判断容器中是否包含指定元素 

1.8查找元素位置(第一次出现/最后一次出现) 

 1.9将单例集合转换为数组

​ 1.10容器的并集操作

1.11容器的交集操作

 1.12容器的差集操作

 2.Vector容器

2.1Vector容器的使用:


1.ArrayList容器类

ArrayList 是 List 接口的实现类。是 List 存储特征的具体实现。

ArrayList 底层是用数组实现的存储。 特点:查询效率高,增删效率低,线程不安全。

1.1添加元素

package Container;

import java.util.ArrayList;
import java.util.List;

public class ArrayListTest01 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        boolean flag = list.add("chen");  //按照索引进行顺序的存储方式
        System.out.println(flag);    //add(elem)会返回一个boolean类型的值
        list.add(0,"张三");   //按照索引位置插入元素
        list.add(0,"李四");

        //输出容器中的元素

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

    }
}

运行结果:

1.2获取元素

package Container;

import java.util.ArrayList;
import java.util.List;

public class ArrayListTest01 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        boolean flag = list.add("chen");  //按照索引进行顺序的存储方式
        System.out.println(flag);
        list.add(0,"张三");   //按照索引位置插入元素
        list.add(0,"李四");

        //输出容器中的元素
        System.out.println(list.get(0));
        System.out.println(list.get(1));
        System.out.println(list.get(2));
    }
}

 运行结果:

1.3删除元素

package Container;

import java.util.ArrayList;
import java.util.List;

public class ArrayListTest01 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        boolean flag = list.add("chen");  //按照索引进行顺序的存储方式
        System.out.println(flag);
        list.add(0,"张三");   //按照索引位置插入元素
        list.add(0,"李四");

        //输出容器中的元素
        list.remove(1);              //删除容器中指定位置索引的元素
        System.out.println(list.get(0));
        System.out.println(list.get(1));
    }
}

1.4替换元素

package Container;

import java.util.ArrayList;
import java.util.List;

public class replaceTest {
    public static void main(String[] args) {
        List<String> list  = new ArrayList<>();
        list.add("张三");
        list.add(0,"李四");
        list.add(2,"王五");
        list.add(2,"老六");
        System.out.println("------替换元素------");

        //将“老六”替换为“社会六”,将原来的值返回给val
        String val = list.set(1,"社会六");
        //输出原来的值
        System.out.println(val);
        for(int i = 0;i<list.size();i++){
            System.out.println(list.get(i));
        }
    }
}

1.5清空容器

list.clear();
System.out.println(list.size());  //清空完成返回0

1.6判断容器是否为空 

//如果容器为空则返回true,否则返回false
boolean flag = list.isEmpty(); 
System.out.println(flag);

1.7判断容器中是否包含指定元素 

//如果在容器中包含指定元素则返回true,否则返回false。
boolean flag = list.contains("oldlu1"); 
System.out.println(flag);

1.8查找元素位置(第一次出现/最后一次出现) 

package Container;

import java.util.ArrayList;
import java.util.List;
/*
* index返回在容器中第一次出现的位置
* 不存在则返回-1
*
* */
public class firstTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张三");
        list.add(0, "李四");
        list.add(2, "王五");
        list.add(2, "老六");
        list.add(3,"老六");
        list.add(4,"老六");

        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i)+"\t");
        }
        System.out.println("");
        String name = "老六";
        int index = list.indexOf(name);
        //如果元素不存在则返回-1
        String name2 = "张四";
        int index1 = list.indexOf(name2);
        System.out.println(name+"在容器中第一次出现的索引序列"+index);
        System.out.println(name2+"在容器中第一次出线的索引序列"+index1);

        System.out.println("-----在容器中最后一次出现的位置-----");

        int index2 = list.lastIndexOf(name);
        System.out.println(name+"在容器中最后一次出现时的索引序列"+index2);
        //当所给元素不存在时候,返回-1
        int index3 = list.lastIndexOf(name2);
        System.out.println(name2+"在容器中最后一次出现的索引序号"+index3);
    }
}


 运行结果:

 1.9将单例集合转换为数组

package Container;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/*
* 将单例集合转换为数组
* */
public class ToArrayListTest {
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        list1.add(0,"张三");
        list1.add(1, "李四");
        list1.add(2, "王五");
        list1.add(3, "老六");
        System.out.println("容器内容:");
        for (int i = 0; i < list1.size(); i++) {
            System.out.print(list1.get(i)+"\t");
        }
        System.out.println("");
        System.out.println("数组长度:"+list1.size());
        //将ArrayList转换为Object数组,但是在转换之后对数组不能做强制类型转换
        Object[] arr = list1.toArray();
        System.out.println("转换为数组后输出:");
        System.out.println(Arrays.toString(arr));
        System.out.println("-----将单例集合转化为指定类型的数组-----");
//        可以将单例集合转换为指定类型数组,但是类型需要参考泛型中de

        String[] arr2 = list1.toArray(new String[list1.size()]);
        System.out.println(Arrays.toString(arr2));

    }
}

 1.10容器的并集操作

package Container;

import java.sql.ClientInfoStatus;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
* 容器的并集操作
* Union set是并集的意思
* */
public class UnionSetTest {
    public static void main(String[] args) {
//        容器1
        List<String> list = new ArrayList<>();
        list.add(0,"张三");
        list.add(1,"李四");
        list.add(2,"王五");
        list.add(3,"赵六");

        //    容器2
        List<String> list1 = new ArrayList<>();
        list1.add(0,"王五");
        list1.add(1,"赵六");
        list1.add(2,"沈七");
        list1.add(3,"老八");

        boolean flag = list.addAll(list1);
        System.out.println(flag);

//        我们遍历一下是否并集完成。我们用上述知识先转化为数组,然后在用增强for循环来操作一下遍历
        String[] arr  = list.toArray(new String[list.size()]);
        System.out.println(Arrays.toString(arr));
        //    增强for循环遍历
        for(String str : list){
            System.out.println(str);
        }
    }
    /*
    * 我们不能对一个没有元素的容器进行并集操作,不然会返回false
    * */

}

结果:

1.11容器的交集操作

所谓交集就是两个容器中相同的部分

package Container;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/*
* 容器的交集操作
* */
public class InterSectionTest {
    public static void main(String[] args) {
//        容器1
        List<String> list = new ArrayList<>();
        list.add(0, "张三");
        list.add(1, "李四");
        list.add(2, "王五");
        list.add(3, "赵六");

        //    容器2
        List<String> list1 = new ArrayList<>();
        list1.add(0, "王五");
        list1.add(1, "赵六");
        list1.add(2, "沈七");
        list1.add(3, "老八");

        boolean flag = list.retainAll(list1);
        System.out.println(flag);

        String[] arr = list.toArray(new String[list.size()]);
        System.out.println(Arrays.toString(arr));

    }
}

 结果:

 1.12容器的差集操作

package Container;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/*
* 容器的差集操作
* 容器1中的元素如果容器2中也存在相同部分的元素,则在容器1中会相对应的删除相同部分,仅保留下容器1中不重复的元素
* */
public class DifferentSetTest {
    public static void main(String[] args) {
//        容器1
        List<String> list = new ArrayList<>();
        list.add(0, "张三");
        list.add(1, "李四");
        list.add(2, "王五");
        list.add(3, "赵六");

        //    容器2
        List<String> list1 = new ArrayList<>();
        list1.add(0, "王五");
        list1.add(1, "赵六");
        list1.add(2, "沈七");
        list1.add(3, "老八");

        boolean flag = list.removeAll(list1);
        System.out.println(flag);

        String[] arr = list.toArray(new String[list.size()]);
        System.out.println(Arrays.toString(arr));
    }

}

 结果:

 2.Vector容器

Vector 底层是用数组实现的,相关的方法都加了同步检查,因此“线程安全,效率低”。比如,indexOf 方法就增加了 synchronized 同步标记。

2.1Vector容器的使用:

Vector 的使用与 ArrayList 是相同的,因为他们都实现了 List 接口,对 List 接口中的抽象方法做了具体实现。而具体实现方法和ArrayList的实现方法大同小异,我们就一步到位!

package Container;

import java.util.Arrays;
import java.util.List;
import java.util.Vector;

public class VectorTest {
    public static void main(String[] args) {
        List<String> vector = new Vector<>();
//        添加元素
        boolean flag = vector.add("张三");
        vector.add(1, "李四");
        System.out.println(flag);
//        获取元素
        int num = 0;
        System.out.println("索引" + num + "位置的元素为" + vector.get(num));
//          替换元素
        vector.set(1, "张四");
//        在这里我们优先将vector容器中的元素转换到数组里面以便查找方便
        String[] arr = vector.toArray(new String[vector.size()]);
        System.out.println("此时容器中的元素为:" + Arrays.toString(arr));
//      删除元素
        vector.remove(1);   //删除张四
//        清空容器 判断容器是否为空
        vector.clear();
        System.out.println("容器中的元素个数为:" + vector.size());  //清空之后size返回0
//      在这里我们重新添加新的元素进去
        vector.add(0, "张三");
        vector.add(1, "李四");
        vector.add(2, "王五");
//        判断容器中是否包含指定元素
        String name = "张三";
        String name1 = "张四";
        boolean flag1 = vector.contains(name);
        boolean flag2 = vector.contains(name1);

        System.out.println(name + "包含结果为:" + flag1);
        System.out.println(name1 + "包含结果为:" + flag2);
//      查找元素位置:第一次和最后一次(我们首先对容器内容作出增加)
        vector.add("赵六");
        vector.add("七七");
        vector.add("老八");
        vector.add("小汉堡");
        System.out.println("第一次出现:" + vector.indexOf("张三"));
        System.out.println("最后一次出现:" + vector.lastIndexOf("张三"));
//        vector的并集操作
        //我们先定义另一个容器
        List<String> vector2 = new Vector<>();
        vector2.add("李四");
        vector2.add("李五");
        vector2.add("张三");
        vector2.add("老八");
        vector2.add("小汉堡");
        String[] arr_v1 = vector.toArray(new String[vector.size()]);
        System.out.println("目前容器vector的元素为:" + Arrays.toString(arr_v1));
        String[] arr_v2 = vector2.toArray(new String[vector2.size()]);
        System.out.println("目前容器vector2的元素为:" + Arrays.toString(arr_v2));

        //并集操作
        vector.addAll(vector2);

        String[] arr2 = vector.toArray(new String[vector.size()]);
        System.out.println("并集操作之后容器中的元素为:" + Arrays.toString(arr2));
/*//        交集
        boolean flag3 = vector.retainAll(vector2);
        System.out.println("交集操作实现结果:"+flag3);
        String[] arr3 = vector.toArray(new String[vector.size()]);
        System.out.println("交集操作之后容器中的元素为:"+Arrays.toString(arr3));
//          差集
        boolean flag4 = vector.removeAll(vector2);
        System.out.println("差集操作实现结果:"+flag4);
        String[] arr4 = vector.toArray(new String[vector.size()]);
        System.out.println("差集操作之后容器中的元素为:"+Arrays.toString(arr4));

    }*/
    }
}

由于作者在写代码的过程中发现交集和差集运行中出现了一些问题,暂时找不到解决办法,就先注释掉。运行结果为 :

 ArrayList容器类和vector容器类就先写到这里!

欢迎评论私信我你们遇到的问题,看到后我会第一时间帮你答疑解惑!本文为作者复盘时梳理的知识点内容,三周左右复盘完大学Java学习中的所有内容,届时会设置为仅粉丝可查阅,感兴趣的同学可以关注我哦!也欢迎咨询你遇到的别的问题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值