List集合基础

1.List集合基础
在这里插入图片描述

  • List接口继承自Collection接口,它包含了Collection中的所有方法。List接口定义了两个很重要的方法:

  • get(int index):获得指定索引位置的元素

  • set(int index,Object obj):将集合中指定索引位置的对象修改为指定的对象

2.List接口的实现类
常用实现类有:ArrayList和LinkedList

  • ArrayList类:实现的是可变数组,允许保存所有的元素,包括null。优点:可以根据索引位置对集合中的元素进行快速随机访问;缺点:向指向位置插入或者删除对象的速度较慢。
  • LinkedList类:采用链表结构保存对象。优点:便于向集合中插入和删除对象。缺点:随机访问元素时效率较慢。
  • 对比:当需要向集合类中指定位置插入或删除时,用LinkedList类实现List集合效率较高;当需要随机访问集合中的对象时,ArrayList类实现List集合的效率较高;
  • 使用List集合时,通常声明为List类型,通过不同的实现类来实例化集合
    List list1=new ArrayList<>();
    List list2=new LinkedList<>();

3.常用方法:
在这里插入图片描述
代码练习:

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

public class ListDemo {
    public static void main(String[] args) {
        List <String> courses=new ArrayList<>();//向上转型
             // list是一个接口,不能直接使用,所以new一个实现类ArrayList
        courses.add("C语言");//尾插
        courses.add("Java SE");
        courses.add("Java Web");
        courses.add("Java EE");
        //和数组一样,允许添加重复元素
        courses.add("C语言");
        //可以直接按照输入顺序输出,集合类都可以直接打印
        System.out.println(courses);
        //可以类似数组的方式获取指定下标的方式访问
        System.out.println(courses.get(0));//get()获取指定下标元素
       courses.set(0,"数据结构"));//set(),修改指定位置的元素
        //get(),set()方法对顺序表有效,对链表也有效
        System.out.println(courses);//再次打印
        //subList()方法,截取部分元素[1,3),注意是左闭右开区间
        List<String> subList=courses.subList(0,3);
        System.out.println("截取[0,3)的结果是:"+subList);
        //remove(),删除遇到的第一个元素,遇到则删除返回true,没有元素则返回false
        System.out.println(courses.remove("C语言"));
        System.out.println("判断数据结构是否在线性表中:"+courses.contains("数据结构"));
        System.out.println(courses);
//       courses.clear();//清空,无返回值

        //重新构造
        List<String> courses2 = new ArrayList<>(courses);
        System.out.println(courses2);
        List<String> courses3 = new LinkedList<>(courses);
        System.out.println(courses3);

        //引用的转换
        ArrayList<String> courses4 = (ArrayList<String>) courses2;
        System.out.println(courses4);//无错
        LinkedList<String> courses5 = (LinkedList<String>) courses3;
        System.out.println(courses5);
//        ArrayList<String> c1 = (ArrayList<String>) courses3;//错误类型
//        LinkedList<String> c2 = (LinkedList<String>) courses2;//错误类型
//上述例子说明ArrayList和LinkedList不能直接强制互相转换
        }
    }

结果:

[C语言, Java SE, Java Web, Java EE, C语言]
C语言
C语言
[数据结构, Java SE, Java Web, Java EE, C语言]
截取[03)的结果是:[数据结构, Java SE, Java Web]
true
判断数据结构是否在线性表中:true
[数据结构, Java SE, Java Web, Java EE]
[数据结构, Java SE, Java Web, Java EE]
[数据结构, Java SE, Java Web, Java EE]
[数据结构, Java SE, Java Web, Java EE]
[数据结构, Java SE, Java Web, Java EE]

Process finished with exit code 0

//问题:输出了两行C语言,不太懂,应该只有一行
//已解决,set()方法不是用来输出的,多输出了一次

错误转换异常:

Exception in thread "main" java.lang.ClassCastException: java.util.LinkedList cannot be cast to java.util.ArrayList
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值