文章目录

  • List接口概述
  • List接口常用方法
  • ArrayList实现类
  • LinkedList实现类
  • Vector实现类


List接口概述

List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引

List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据
序号存取容器中的元素

List接口的实现类有:ArrayList、LinkedList和Vector



List接口常用方法

List除了从Collection集合继承的方法外,List 集合里添加了一些根据索引来操作集合元素的方法。

void add(int index, Object ele):在index位置插入ele元素

boolean addAll(int index, Collection eles):从index位置开始将eles中的元素添加进来

Object get(int index):获取指定index位置的元素

int indexOf(Object obj):返回obj在集合中首次出现的位置

int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置

Object remove(int index):移除指定index位置的元素,并返回此元素

Object set(int index, Object ele):设置指定index位置的元素为ele

List subList(int fromIndex, int toIndex):返回[fromIndex,toIndex)处的子集合



ArrayList实现类

线程不安全,效率较高。底层使用数组进行存储。进行查找、末尾添加等操作相对较多的数据通常采用ArrayList实现类。

JDK1.7(类似于单例中饿汉式)

ArrayList list = new ArrayList(); //无参构造器,底层创建了长度为10的Object[]数组elementData
list.add(123); //elementData[0] = new Integer(123);
...
list.add(11); //如果此次的添加导致底层elementData数组容量不够,则会扩容,默认情况下扩容为原来的1.5倍,同时将原有的数组中的数据复制过去//有参构造器
ArrayList listTwo = new ArrayList(int capacity);

JDK1.8(类似于单例中懒汉式)

ArrayList list = new ArrayList(); //无参构造器,底层Object[] elementData初始化为{},即还没有创建长度为10的数组
list.add(123); //第一次调用add()时,底层才创建长度为10的数组
//其余与JDK1.7一样

注意:Arrays.asList(…)方法返回的 List 集合,既不是 ArrayList 实例,也不是
Vector 实例。Arrays.asList(…)返回值是一个固定长度的 List 集合。



LinkedList实现类

线程不安全,效率较高。对于频繁进行插入、删除的操作,建议使用LinkedList类,效率较高。

LinkedList list = new LinkedList(); //内部声明了Node类型的first和last属性,用于记录首末元素,默认值为null
list.add(123); //创建Node对象,将123封装到Node对象中,该对象中还有prev和next两个变量,分别用来记录前一个和下一个元素的位置

Node类型的定义

private static class Node<E> {E item;Node<E> next;Node<E> prev;Node(Node<E> prev, E element, Node<E> next) {this.item = element;this.next = next;this.prev = prev;}
}


Vector实现类

Vector是线程安全的。大多数操作与ArrayList相同。通过Vector()构造器创建对象时,底层都创建长度为10的数组。在扩容方面,默认扩容为原来的数组长度的2倍。

在各种List中,最好把ArrayList作为缺省选择。当插入、删除频繁时,使用LinkedList;Vector总是比ArrayList慢,所以尽量避免使用。

Java集合(4)--List接口及其实现类ArrayList、LinkedList和Vector相关推荐

  1. Java学习(90)Java集合排序——Comparator接口介绍、案例:对宠物猫分别按名字升序、年龄降序进行排列

    Java集合排序--Comparator接口介绍.案例:对宠物猫分别按名字升序.年龄降序进行排列 Comparator接口介绍 1. Comparator接口: 2. Comparator接口中的co ...

  2. Java中的Type接口和Class类区别和联系

    Java中的Type接口和Class类有什么区别 Type是Class的父接口. Type 是 Java 编程语言中所有类型的公共高级接口.它们包括原始类型.参数化类型.数组类型.类型变量和基本类型. ...

  3. java hashedmap_Java基础 - Map接口的实现类 : HashedMap / LinkedHashMap /TreeMap 的构造/修改/遍历/ 集合视图方法/双向迭代输出...

    import java.util.*; /**一:Collection接口的 * Map接口: HashMap(主要实现类) : HashedMap / LinkedHashMap /TreeMap ...

  4. Java集合:Collection接口

    Collection是一个接口,继承自Iterable.我们先看一下Iterable接口的源码 一.Iterable package java.lang;import java.util.Iterat ...

  5. java集合框架的接口_Java集合框架——Set接口

    第三阶段 JAVA常见对象的学习 集合框架--Set接口 List集合的特点是有序的,可重复的,是不是存在这一种无序,且能保证元素唯一的集合呢?(HashSet )这就涉及到我们今天所要讲的Set集合 ...

  6. Java集合框架之接口Collection源码分析

    本文我们主要学习Java集合框架的根接口Collection,通过本文我们可以进一步了解Collection的属性及提供的方法.在介绍Collection接口之前我们不得不先学习一下Iterable, ...

  7. Java集合框架——List接口

    第三阶段 JAVA常见对象的学习 集合框架--List接口 image 按照集合框架的继承体系,我们先从Collection中的List接口开始学习 (一) 概述及功能(ArrayList演示) (1 ...

  8. 【Java集合】List接口常用方法及实现子类

    文章目录 List接口 > List 接口的常用方法 > List的三种遍历方式 > List 排序练习 ※ ArrayList 使用注意事项 ※ ArrayList 底层结构 ※ ...

  9. java集合框架的接口_Java集合框架之Collection接口详解

    Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下 ...

最新文章

  1. Notepad++加上xml格式化的功能
  2. python大数_python处理大数字的方法
  3. jqGrid专题:jqGrid原理
  4. MFC开发IM-第二十一篇、Unicode转成Utf8
  5. linux ppp拨号 USB,linux下ppp拨号上网
  6. python变量和数据类型_Python变量和数据类型简介
  7. linux时间同步ntp服务的安装与配置
  8. G++和C++区别和评测注意事项
  9. 微信小程序报 47001 - data format error hint
  10. 云计算对21世纪IT人的挑战
  11. 馈线中的VSWR电压驻波比
  12. 【CJOJ P1096】最佳老农
  13. Python学习-假人和配对
  14. 提取wux-weapp的微信小程序筛选框:FilterBar
  15. windows搭建go语言开发环境
  16. 如何快速访问StackOverFlow
  17. Hotspot细节实现安全区域、记忆集卡表
  18. java.lang.IllegalArgumentException的解决方法
  19. 移植zlog到openwrt
  20. 面试100题:TCP/IP的理解

热门文章

  1. 从Java程序生成QR码图像
  2. Servlet中获取请求体的数据
  3. 配置 Powerline 到 Vim
  4. xgboost简单介绍_好文干货|全面理解项目中最主流的集成算法XGBoost 和 LightGBM
  5. python初学者代码示例_Selenium 快速入门笔记和代码示例(Python版)
  6. matlab 传输速率,处理速率转换 - MATLAB Simulink - MathWorks 中国
  7. js模仿f11全屏_JS实现全屏预览F11功能的示例代码
  8. 聚合项目访问后台接口失败_聚合支付系统和免签支付系统对未来支付市场有哪些影响...
  9. python xlrd读取文件报错_python中xlrd库如何实现文件读取?
  10. 网络光端机产品特点及实际应用范围详解