目录

  • Java开发入门
    • ● Java 概述
    • ● JDK的使用
    • ● 系统环境变量
    • ● 第一个Java程序
    • ● Java的运行机制
    • ● 教学设计
    • ● 课程讲义
    • ● 案例学习
    • ● 课后题答案
  • Java 编程基础
    • ● Java的基本语法
      • ● Java代码基本格式
      • ● Java中的注释
      • ● Java中的关键字
      • ● Java中的标识符
    • ● Java中的变量与常量
      • ● 变量的定义
      • ● 变量的数据类型
        • ● 案例导学
      • ● 变量的类型转换
        • ● 案例导学-自动类型转换
        • ● 案例导学-强制类型转换
      • ● 变量的作用域
        • ● 案例导学-作用域
      • ● Java中的常量
    • ● Java中的运算符
      • ● 案例导学-算术运算符
      • ● 案例导学-赋值运算符
      • ● 案例导学-比较运算符
      • ● 案例导学-逻辑运算符
      • ● 案例导学-位运算符
      • ● 案例导学-运算符的优先级
    • ● 选择结构语句
      • ● 案例导学-if条件语句
      • ● 案例导学-switch条件语句
    • ● 循环结构语句
      • ● 案例导学-while循环语句
      • ● 案例导学-for循环语句
      • ● 案例导学-循环嵌套
      • ● 案例导学-break语句
      • ● 案例导学-continue语句
    • ● 数组
      • ● 案例导学-一维数组的定义
      • ● 案例导学-数组最值
      • ● 案例导学-数组排序
    • ● 教学设计
    • ● 课程讲义
    • ● 课后题答案
  • 面向对象(上)
    • ● 面向对象概述
    • ● Java中的类与对象
      • ● 案例导学-类与对象
    • ● 类的封装
    • ● 案例导学-类的封装
    • ● 方法的重载和递归
    • ● 构造方法
      • ● 案例导学-构造方法与重载
    • ● this关键字
      • ● 案例导学-this
    • ● static关键字
      • ● 案例导学-静态变量
      • ● 案例导学-静态方法
      • ● 案例导学-静态代码块
    • ● 教学设计
    • ● 课程讲义
    • ● 章节测试
    • ● 课后题答案
  • 面向对象(下)
    • ● 类的继承
      • ● 案例导学-类的继承
      • ● 案例导学-方法的重写
      • ● 案例导学-super访问父类成员变量
      • ● 案例导学-super访问父类成员方法
      • ● 案例导学-super访问父类构造方法
    • ● final关键字
    • ● 抽象类和接口
    • ● 多态
    • ● 内部类
    • ● JDK8的Lambda表达式
    • ● 异常
    • ● 垃圾回收
    • ● 教学设计
    • ● 课程讲义
    • ● 章节测试
    • ● 课后习题答案
  • Java中的常用类
    • ● String类和StringBuffer类
    • ● System类与Runtime类
    • ● Math类与Random类
    • ● 包装类
    • ● 日期与时间类
    • ● 格式化类
    • ● 课后题答案
    • ● 课程讲义
  • 集合
    • ● 集和概述
    • ● Collection接口
    • ● List接口
      • ● List接口简介
      • ● ArrayList集合
      • ● LinkList集合
    • ● Collection集合遍历
    • ● Set接口
    • ● Map接口
    • ● 泛型
    • ● 常用工具类
      • ● Collections工具类
      • ● Arrays工具类
    • ● 课后题参考答案
    • ● 课程讲义
  • IO流
    • ● I/O流概述
    • ● 字节流
    • ● 字符流
    • ● File类
    • ● RandomAccessFile
    • ● 对象序列化
    • ● NIO
    • ● NIO.2
    • ● 课后题答案
    • ● 课程讲义
    • ● 章节测试
  • GUI(图形用户接口)
    • ● Swing概述
    • ● Swing顶级容器
    • ● 布局管理器
    • ● 事件处理
    • ● Swing常用组件
    • ● Swing组件的整合使用
    • ● JavaFX图形用户界面工具
    • ● 课程讲义
  • JDBC
    • ● 什么是JDBC
    • ● JDBC常用API
    • ● JDBC编程
    • ● 案例-使用JDBC实现QQ登录
    • ● 课程讲义
  • 多线程
    • ● 线程概述
    • ● 线程的创建
    • ● 线程的生命周期及状态转换
    • ● 线程的调度
    • ● 多线程同步
    • ● 多线程通信
    • ● 教学设计
    • ● 课后题参考答案
    • ● 课程讲义
  • 网络编程
    • ● 网络通信协议
    • ● UDP通信
    • ● TCP通信
    • ● 课程讲义
  • Eclipse开发工具
    • ● Eclipse概述
    • ● Eclipse的安装与启动
    • ● Eclipse进行程序开发
    • ● Eclipse程序调试
    • ● 使用Eclipse导出、导入jar文件
  • ACM大赛题库
    • ● 2027
    • ● 2028
    • ● 2024-2026
    • ● 2012-2023
    • ● 2018-2020
    • ● 2015-2017
    • ● 2012-2014
    • ● 2009-2011
    • ● 2003-2005
    • ● 2000-2002
  • PBL学生风采展示
    • ● 实验一
    • ● 实验二
    • ● 实验三
    • ● 实验四
List接口

一、List接口

List承诺可以将元素维护在特定的序列中。List接口在Collection的基础上添加了大量的方法,使得可以在List的中间插入和删除元素。List与 set 不同,列表通常允许重复的元素。并且存放的顺序与插入的顺序一致。,此接口的定义如下:

public interface List<E> extends Collection<E>

二、List接口的扩展方法

No.方法类型描述
1public void add(int index, E element)普通在指定位置增加元素
2public boolean addAll(int index, Collection<? extends E> c)普通在指定位置增加一组元素
3E get(int index)普通返回指定位置的元素
4public int indexOf(Object o)普通查找指定元素的位置
5public int lastIndexOf(Object o)普通从后向前查找指定元素的位置
6public ListIterator<E> listIterator()普通为ListIterator接口实例化
7public E remove(int index)普通按指定的位置删除元素
8public List<E> subList(int fromIndex, int toIndex)普通取出集合中的子集合
9public E set(int index, E element)普通替换指定位置的元素

 三、List接口的常用子类 —— ArrayList和LinkedList

1、ArrayList擅长于随即访问元素,因为它像数组一样提供了下标,可以根据下标直接访问,所以可以将ArrayList看作可扩充自身尺寸的数组。但是在ArrayList的中间插入和移除元素时较慢。



import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class ArrayListTest {

    public static void main(String[] args) {

        List<String> list = new ArrayList<String>();

        //添加元素

        list.add("aaa");

        list.add("bbb");

        list.add("aaa");

        list.add("ddd");

        list.add("ccc");

        list.add(null);

        //遍历

        for (String string : list) {

            System.out.println(string);

        }

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

        //修改

        list.set(1, "bbb2");

        //删除

        list.remove("ccc");

        //迭代器遍历

        Iterator<String> iterator = list.iterator();

        while(iterator.hasNext()){

            System.out.println(iterator.next());

        }

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

        list.clear(); //清空列表

        System.out.println("清空后list的大小"+list.size());//打印大小

        List<String> list2 = new ArrayList<String>();

        list2.add("a");

        list2.add("b");

        //将list2添加到list中

        list.addAll(list2);

        //遍历

        for (String string : list) {

            System.out.println(string);

        }

    }

}

2、LinkedList通过代价较低的在List中间进行插入和删除操作,提供了优化的顺序访问。但是在随即访问方面相对比较慢。

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;

import java.util.Random;

public class LinkedListTest {

    public static void main(String[] args) {

        List<Integer> arraylist = new ArrayList<Integer>();

        for (int i = 0; i < 5000; i++) {

            arraylist.add(i);

        }

        List<Integer> linkedlist = new LinkedList<Integer>();

        for (int i = 0; i < 5000; i++) {

            linkedlist.add(i);

        }

        Random rand = new Random(5000);

        //随机访问arrayList

        long start = System.currentTimeMillis();

        for (long i = 0; i < 500000; i++) {

            arraylist.get(rand.nextInt(5000));

        }

        long end = System.currentTimeMillis();

        System.out.println("arrayList随机访问时间:"+(end - start));

        //随机访问arrayList

        start = System.currentTimeMillis();

        for (long i = 0; i < 500000; i++) {

            linkedlist.get(rand.nextInt(5000));

        }

        end = System.currentTimeMillis();

        System.out.println("linkedlist随机访问时间:"+(end - start));

    }

}