[TOC]

List接口

概述有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

Collection将集合划分为两大类:List集合

Set集合

List接口的特点有序【存储有序】

可重复

可以存储 null值

部分子集合线程安全,部分不安全 例如 ArrayList 和 Vector

有索引,针对每个元素能够方便地查询和修改

判断元素是否重复依赖于equals方法

​ a. 如果元素是系统类,不需要重写equals方法

​ b. 如果是自定义类,就需要我们按需求重写 equals方法

List接口的常用方法

void add(int index, E element) 在指定 index 索引处理插入元素 element

boolean addAll(int index, Collection extends E> c) 在指定 index 索引处理插入集合元素 c

删除

E remove(int index) 删除指定索引 index 处的元素

修改

E set(int index, E element) 修改指定索引 index 处的元素为 element

遍历

E get(int index) + int size() for循环遍历集合中的每一个元素 ListIterator listIterator() 通过列表迭代器遍历集合中的每一个元素 ListIterator listIterator(int index) 通过列表迭代器从指定索引处开始正向或者逆向遍历集合中的元素

获取

E get(int index) 获取指定索引处的元素 int indexOf(Object o) 从左往右查找,获取指定元素在集合中的索引,如果元素不存在返回 -1 int lastIndexOf(Object o) 从右往左查找,获取指定元素在集合中的索引,如果元素不存在返回 -1 List subList(int fromIndex, int toIndex) 截取从 fromIndex 开始到 toIndex-1 处的元素

List接口的遍历方式toArray

Iterator

foreach

普通for

ListIterator

List接口去除重复元素

​ 方式一:创建一个新的集合去除重复元素再使用地址传递

​ 方式二:在原集合的基础上使用选择排序思想去除重复元素

并发修改异常的处理

异常名称:并发修改异常 java.util.ConcurrentModificationException

产生原因:在使用迭代器迭代的同时使用原集合对元素做了修改

解决办法:使用 toArray 方法

使用 普通 for 遍历

使用 ListIterator 遍历集合并且使用 列表迭代器修改元素

Set

Set接口的特点:

1.无序 【存储无序】

2.唯一

3.可以存储null值,但是null不能重复

ArrayList

概述List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector类,除了此类是不同步的。)

特点底层数据结构是数组

增加和删除的效率低,查询和修改的效率高

能够存储 null 值

线程不安全,效率高 可以通过 Collections.synchronizedList();变安全

有索引,能够方便检索

元素可重复,我们自己可以通过 选择排序去重复

不可以排序,但是可以通过 Collections.sort();方法排序

注:ArrayList中常用的方法全部来自于 父类 Collection,List,Object.这里不再做详细叙述。

Vector

概述Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。

特点底层数据结构是数组

有索引,能够方便检索

增加和删除的效率低,查询和修改的效率高

线程安全,效率低

能够存储 null 值

元素可重复【我们自己可以通过选择排序思想去除重复元素】

不可以排序,但是可以通过 Collections.sort();方法排序

常用方法

增加

public synchronized void addElement(E obj) 添加元素 obj 到集合中 public synchronized void insertElementAt(E obj, int index) 在指定索引 index 处插入元素 obj

删除

public synchronized void removeElementAt(int index) 移除指定索引 index 处的元素 public synchronized void removeAllElements() 移除所有元素

修改

public synchronized void setElementAt(E obj, int index) 修改指定索引 index 的元素为 obj

遍历

public synchronized E elementAt(int index) + size() for循环遍历集合中的所有元素 public synchronized Enumeration elements() 使用 Enumeration 迭代器遍历集合中的元素

获取

public synchronized E firstElement() 获取集合中的第一个元素 public synchronized E lastElement() 获取集合中的最后一个元素 public synchronized E elementAt(int index) 获取指定索引 index 的元素

相关面试题

ArrayList和Vector的区别? 1) Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。

2) 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

Stack

概述Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。

特点基于栈结构的集合,先进后出

Stack 类是 Vector类的子类,所以该类也是线程安全的,效率低,建议使用 Deque接口的实现类

常用方法

E push(E item) 将元素压入栈底 E pop() 将元素从栈结构中弹出,并作为此函数的值返回该对象,此方法会影响栈结构的大小 E peek() 查看堆栈顶部的对象,但不从栈中移除它。 boolean empty() 测试栈是否为空。 int search(Object o) 返回对象在栈中的位置,以 1 为基数。

注:如果栈中元素为空,再尝试弹栈,将会抛出 EmptyStackException 异常, 而不是 NoSuchElementException

Queue

概述在处理元素前用于保存元素的 collection。除了基本的 null 或 false,具体取决于操作)。插入操作的后一种形式是用于专门为有容量限制的 Queue 实现设计的;在大多数实现中,插入操作不会失败。

特点该接口是队列接口的根接口,先进先出

该接口提供队列相关两种形式的方法,一种抛出异常(操作失败时),另一种返回一个特殊值(null 或 false,具体取决于操作)。插入操作的后一种形式是用于专门为有容量限制的 Queue 实现设计的;在大多数实现中,插入操作不会失败。

常用方法

| | 抛出异常 | 返回特殊值 | | ---- | --------- | ---------- | | 插入 | add(e) | offer(e) | | 移除 | remove() | poll() | | 检查 | element() | peek() |

java list 接口_Java 集合 List接口相关推荐

  1. java的set接口_Java集合-Set接口

    importorg.junit.Test;import java.util.*;/*** * Collection接口:单列集合,用来存储一个一个的对象 * (不常用)子接口Set:存储无序的.不可重 ...

  2. java 集合 接口_Java集合之Collection接口

    1 - Java集合介绍 /* 1. 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储. 2. 另一方面,使用Array存储对象方面具有一些弊 端,而 ...

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

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

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

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

  5. java调c的接口_Java调用C接口的简单示例

    Java调用C接口的简单示例 正好需要用到Java调用dll里的C接口,想到自己做个简单的例子.我们可能需要自己生成dll文件,下边介绍一下,详细的步骤.主要参考https://blog.csdn.n ...

  6. php接口和java接口_java和php接口的区别是什么

    java和php接口的区别是:1.php接口中的抽象方法只能是public的,默认也是public权限:2.java中私有方法使用private修饰,供接口中的默认方法或者静态方法调用. [相关学习推 ...

  7. java中塑形_Java学习5——接口和多态

    1 接口 接口相当于一个完全抽象的,没有任何实现的类 所有的成员函数都是抽象函数 所有的成员变量都是public static final而且一定要赋予初值 接口中的静态函数必须有函数体 接口在声明时 ...

  8. java语言sql接口_Java语言SQL接口

    Java语言SQL接口 编辑 锁定 讨论 上传视频 <Java语言SQL接口>是1997年清华大学出版社出版的图书,作者是孙元等.本书覆盖了JDBC的各个方面,适合于有一定的Java语言编 ...

  9. java抽象机制_Java很好学:接口+抽象类+事件监听机制

    接口?抽象类? 首先知道知道下接口.抽象类的概念 接口:只含有常量和抽象方法(只有方法名和参数不含方法体的方法) 抽象类:可以定义常量和抽象方法(和接口一样),还可以定义变量和普通方法和构造方法(和一 ...

最新文章

  1. Android 新手常见的10个误区(上)
  2. nvidia显卡cuda的性能_性能追平上代万元旗舰!NVIDIA GeForce RTX 3070规格解析
  3. Linux Centos7 下安装Mysql - 8.0.15
  4. CRecordset类
  5. 香港公司章程中英文样本
  6. 2020淘宝双11最强星秀猫怎么玩 怎么退出队伍你知道吗
  7. html页面太大了怎么调小,html – 如何在调整浏览器窗口大小时保持绝对定位的元素...
  8. CISCO Switchport trunk encap dot1q 与 Switchport trunk 区别
  9. python兔子生兔子
  10. 大一计算机基础试题答案,计算机基础知识试题及答案-(1).doc
  11. QGIS基于多期哨兵2影像遥感指数阈值法提取冬小麦分布(3)-NDVI阈值
  12. 多python版本共存的环境中,查看 pip 命令对应的 python 版本
  13. 公有云上虚拟机故障恢复
  14. 游戏开发常用工具总结
  15. BeanDefinition 属性详解
  16. readl()和writel()
  17. 2012年2月12日汇报Axure RP Pro 6.5 Beta简体中文加强测试版进展
  18. kettle调优之读写速度
  19. 常用国外顶格(掘客)JAVASCRIPT
  20. [EXCEL][VBA][MSSQL][档案数字化]通用录入系统

热门文章

  1. 项目部署到tomcat6.0启动成功后访问页面报500_.net core IIS部署教程
  2. java web 的开发环境_JAVA WEB开发环境与搭建
  3. C语言家谱管理程序,课内资源 - 基于C语言实现的家谱管理系统
  4. ehcache 清除缓存_如何设计一个本地缓存
  5. azure kinect三维点云_万众期待的 【三维点云处理】 课程来啦!
  6. PHP中 $_SERVER的信息汇总
  7. oracle mysql 创建表,Oracle 创建表用户、空间
  8. 一家公司干了8年的程序员的年终总结
  9. Linux下面makefile编写
  10. (笔记)Linux服务器中判断客户端socket断开连接的方法