博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java容器-List接口
阅读量:4203 次
发布时间:2019-05-26

本文共 7233 字,大约阅读时间需要 24 分钟。

1. List 接口特点

有序:有序(元素存入集合的顺序和取出的顺序一致)。List 中每个元素都有索引标记。可以根据元素的索引标记(在 List 中的位置)访问元素,从而精确控制这些元素。

可重复:List 允许加入重复的元素。更确切地讲,List 通常允许满足 e1.equals(e2) 的元素重复加入容器。

2. List 的常用方法

除了 Collection 接口中的方法,List 多了一些跟顺序(索引)有关的方法,参见下表:

方法 说明
void add (int index, Object element) 在指定位置插入元素,以前元素全部后移一位
Object set (int index,Object element) 修改指定位置的元素
Object get (int index) 返回指定位置的元素
Object remove (int index) 删除指定位置的元素,后面元素全部前移一位
int indexOf (Object o) 返回第一个匹配元素的索引,如果没有该元素,返回-1
int lastIndexOf (Object o) 返回最后一个匹配元素的索引,如果没有该元素,返回-1

3. ArrayList 容器类

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

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

3.1 添加元素

//实例化String类型的ArrayList容器//面向接口编程,使用接口实例化对象,可以减少后期对代码的改动List
list = new ArrayList<>();//添加元素boolean flag = list.add("两只蝴蝶"); // 添加成功返回true,失败返回false//index的数值不能大于元素的个数list.add(1, "老鼠爱大米"); //无返回值list.add("秋天不回来");list.add("求佛");System.out.println(list); //--[两只蝴蝶, 老鼠爱大米, 秋天不回来, 求佛]

3.2 获取元素

//通过索引获取元素System.out.println(list.get(0));	//两只蝴蝶System.out.println(list.get(1));	//老鼠爱大米System.out.println(list.get(2));	//秋天不回来System.out.println(list.get(3));	//求佛

3.3 删除元素

//删除元素String value = list.remove(1);  //下标从0开始System.out.println(value);  //返回被删除的元素System.out.println(list);   //--[两只蝴蝶, 秋天不回来, 求佛]

3.4 判断容器是否为空

//判断容器是否为空,空返回true,否则返回falseboolean bool = list.isEmpty();System.out.println(bool);

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

//判断容器中是否包含某个元素,包含返回true,否则返回falseboolean bool2 = list.contains("两只蝴蝶");System.out.println(bool2);

3.6 查找元素第一次出现的位置

//查找元素第一次出现的位置,返回索引,元素不存在则返回-1int index = list.indexOf("秋天不回来");System.out.println(index);

3.7 查找元素最后一次出现的位置

//查找元素最后出现的位置,返回索引int index2 = list.lastIndexOf("两只蝴蝶");System.out.println(index2);

3.8 清空容器

//清空容器list.clear();System.out.println(list);

代码如下自取:

import java.util.ArrayList;import java.util.List;public class ArrayListTest01 {
public static void main(String[] args) {
//实例化String类型的ArrayList容器 //面向接口编程,使用接口实例化对象,可以减少后期对代码的改动 List
list = new ArrayList<>(); //添加元素 boolean flag = list.add("两只蝴蝶"); // 添加成功返回true,失败返回false //index的数值不能大于元素的个数 list.add(1, "老鼠爱大米"); //无返回值 list.add("秋天不回来"); list.add("求佛"); System.out.println(list); //--[两只蝴蝶, 老鼠爱大米, 秋天不回来, 求佛] System.out.println("------------------------------------------------------------"); //获取元素 System.out.println(list.get(0)); System.out.println(list.get(1)); System.out.println(list.get(2)); System.out.println(list.get(3)); System.out.println("------------------------------------------------------------"); for (int i = 0; i < list.size(); i++) {
//size():返回list中元素的个数 System.out.println(list.get(i)); } System.out.println("------------------------------------------------------------"); //增强for循环 for (String s : list) {
System.out.println(s); } System.out.println("------------------------------------------------------------"); //替换元素 String str = list.set(1, "老鼠爱吃米"); System.out.println(str); //返回被替换的元素--老鼠爱大米 System.out.println(list); //--[两只蝴蝶, 老鼠爱吃米, 秋天不回来, 求佛] System.out.println("------------------------------------------------------------"); //删除元素 String value = list.remove(1); //下标从0开始 System.out.println(value); //返回被删除的元素 System.out.println(list); //--[两只蝴蝶, 秋天不回来, 求佛] System.out.println("------------------------------------------------------------"); //清空容器// list.clear();// System.out.println(list); System.out.println("------------------------------------------------------------"); //判断容器是否为空,空返回true,否则返回false boolean bool = list.isEmpty(); System.out.println(bool); System.out.println("------------------------------------------------------------"); //判断容器中是否包含某个元素,包含返回true,否则返回false boolean bool2 = list.contains("两只蝴蝶"); System.out.println(bool2); System.out.println("------------------------------------------------------------"); //查找元素第一次出现的位置,返回索引,元素不存在则返回-1 int index = list.indexOf("秋天不回来"); System.out.println(index); //查找元素最后出现的位置,返回索引 int index2 = list.lastIndexOf("两只蝴蝶"); System.out.println(index2); }}

3.9 将单例集合转换成Object数组

import java.util.ArrayList;import java.util.List;public class ArrayListTest02 {
public static void main(String[] args) {
//实例化Integer类型的ArrayList容器 List
list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); System.out.println(list); //ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer //虽然定义容器的时候规定了元素是Integer类型,但是泛型只在编译时有效,其实容器里存的还是Object类型// Integer[] str = (Integer[])list.toArray(); //报错 //将ArrayList转换为Object类型数组 Object[] arr = list.toArray(); for (Object o: arr) {
Integer i = (Integer)o; //可以在迭代的时候对元素进行强制类型转换 System.out.println(i); } }}

3.10 将单例集合转换成泛型数组

import java.util.ArrayList;import java.util.List;public class ArrayListTest03 {
public static void main(String[] args) {
List
list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); //将ArrayList转换为指定类型的数组// Integer[] arr = list.toArray(new Integer[list.size()]); Integer[] arr = list.toArray(new Integer[0]); for (Integer i: arr){
System.out.println(i); } }}

3.11 容器的并集操作

import java.util.ArrayList;import java.util.List;public class ArrayListTest04 {
public static void main(String[] args) {
List
list1 = new ArrayList<>(); list1.add("a"); list1.add("b"); list1.add("c"); List
list2 = new ArrayList<>(); list2.add("c"); list2.add("d"); list2.add("e"); //容器的并集操作 list1.addAll(list2); System.out.println(list1); //[a, b, c, c, d, e] }}

3.12 容器的交集操作

import java.util.ArrayList;import java.util.List;public class ArrayListTest05 {
public static void main(String[] args) {
List
list1 = new ArrayList<>(); list1.add("a"); list1.add("b"); list1.add("c"); List
list2 = new ArrayList<>(); list2.add("c"); list2.add("d"); list2.add("e"); //容器的交集操作 list1.retainAll(list2); System.out.println(list1); //[c] }}

3.13 容器的差集操作

import java.util.ArrayList;import java.util.List;public class ArrayListTest06 {
public static void main(String[] args) {
List
list1 = new ArrayList<>(); list1.add("a"); list1.add("b"); list1.add("c"); List
list2 = new ArrayList<>(); list2.add("c"); list2.add("d"); list2.add("e"); //容器的差集操作 list1.removeAll(list2); System.out.println(list1); //[a, b] }}

4. Vector 容器类

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

Vector 的使用与 ArrayList 是相同的,因为他们都实现了 List 接口,对 List 接口中的抽象方法做了具体实现。

转载地址:http://bqpli.baihongyu.com/

你可能感兴趣的文章