文档章节

Java集合框架_四_List接口

mrbinary
 mrbinary
发布于 2014/01/18 11:39
字数 1751
阅读 138
收藏 6

一、List?

    Collection接口往下继承产生了三个接口,它们有各自的特点,本文要学习的是具有“有序可重复”特点的 List 接口,它也叫做列表。

    在列表中,这使得我们能够精确定位需要进行操作的元素,因为我们有列表的索引,它和数组的索引一致,都是从0开始计数。在接下来要学习的方法中,我们可以发现很多方法都提供了索引参数,有些方法的返回值则是元素的索引。

    List 接口也继承了 ListIterator 接口,这使得 List 中有两个继承而来的获取迭代器的方法,而 List 根据自身特点,又重载了一个方法来获取从列表中指定位置开始的迭代器。

二、Why are there so many methods!

    不要慌乱,虽然 List 接口提供了很多方法,而纵观这些方法,发现可以分类学习,更容易快速掌握。

    (一)本身

        1、int size()

            返回集合本身的大小。

        2、int hashCode()

            返回集合的哈希码值。

    (二)插入

        1、boolean add(E e)

            此方法在列表的尾端加入新元素 e。

            列表发生改变,则返回true。

        2、void add(int index, E element)

            在指定的索引位置插入指定的元素 element,该 element 抢占了指定的索引位置。而原来索引位置上的元素以及该索引以后的元素,索引值都+1。

            不返回任何值。

// 声明一个List
List<String> list = new ArrayList<String>();

// 添加元素
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");

System.out.print("插入前:");
for(String str : list) {
	System.out.print(str + "->");
}

list.add(2, "I'm the new guy!");

System.out.print("\n插入后:");
for(String str : list) {
	System.out.print(str + "->");
}
结果:
插入前:1->2->3->4->5->6->
插入后:1->2->I'm the new guy!->3->4->5->6->

        3、boolean addAll(Collection<? extends E> c)

            将指定集合 c 中的所有元素插入到列表的结尾,而新插入的这些元素的顺序是由指定集合 c 中迭代器方法返回的顺序决定的。

            列表发生改变后,返回true。

        4、boolean addAll(int index, Collection<? extends E> c)

            抢占 index 索引位置,从该位置开始将指定集合 c 中所有元素插入,插入成功后,新列表的索引也自然而然。

            列表发生改变后,返回true。

    (三)删除

        1、boolean remove(Object o)

            删除列表中第一次出现的指定元素 o(如果列表中存在元素 o,返回true,否则返回false)。

            例如:

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

list.add("1");
list.add("2");
list.add("3");
list.add("4");
		
System.out.println("删除元素【2】:" + list.remove("2"));
System.out.println("删除元素【5】:" + list.remove("5"));

System.out.print("删除后的列表:");
for(String str : list) {
    int index = list.indexOf(str);
    if(index != (list.size() - 1)) {
        System.out.print(str + "->");
    } else {
        System.out.print(str);
    }
}
结果:
删除元素【2】:true
删除元素【5】:false
删除后的列表:1->3->4

        2、boolean removeAll(Collection<?> c)

            移除列表中所有包含在指定集合 c 中的元素,相当于移除了列表和集合 c 的交集。

            如果列表因调用该方法而发生改变,则返回true。

        3、boolean retainAll(Collection<?> c)

            和 removeAll 方法相反,retainAll 方法保留的是列表中所有包含在指定集合 c 中的元素,相当于保留了列表和集合 c 的交集。

            如果列表因调用该方法而发生改变,则返回true。

        4、E remove(int index)

            移除指定索引位置上的元素。

            这个方法的返回值很特殊,它返回的是什么?看代码:

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

list.add("1");
list.add("2");
list.add("3");
list.add("4");

System.out.println("删除索引位置为【1】的元素,返回结果为:" + list.remove(1));
结果如下:
删除索引位置为【1】的元素,返回结果为:2

        5、void clear()

            清空该列表。

    (四)访问

        1、E get(int index)

            返回列表中索引为 index 的元素。

        2、List<E> subList(int fromIndex, int toIndex)

            可以用开闭区间的方式来看,将索引位置在 [fromIndex, toIndex) 中的元素按照原顺序提取出来,组成一个新的列表。

            对该方法返回的新列表的任何操作都不会对原列表产生影响。

            新列表的元素个数 = toIndex - fromIndex

    (五)修改

        1、E set(int index, E element)

            将指定索引位置上的元素替换为指定的元素 element。这个方法的返回值也比较特殊,和 remove(int index) 方法一样,都是返回替换之前的元素

    (六)比较、判断方法

        1、boolean contains(Object o)

            判断列表中是否存在指定元素 o。

        2、boolean containsAll(Collection<?> c)

            判断列表中是否存在指定集合 c 中的所有元素,相当于判断集合 c 是否为列表的子集

        3、boolean equals(Object o)

            比较列表和指定对象 o 是否相等,而相等的条件也比较苛刻,它要求指定对象也是一个列表,而两个列表要以相同的顺序包含相同的元素。

        4、boolean isEmpty()

            判断列表中是否有元素存在。

    (七)检索

        1、int indexOf(Object o)

            在列表中以正向顺序查找指定元素 o,返回第一个符合条件的元素索引。但如果列表中不存在该元素,那就返回-1.

        2、int lastIndexOf(Object o)

            和上一个方法类似,唯一的区别是:它返回的是最后一个符合条件的元素索引。

    (八)迭代器

        1、ListIterator<E> listIterator()

            返回列表迭代器,进而可以使用 ListIterator 接口中的方法。(ListIterator 接口在第二篇博客介绍过)

        2、ListIterator<E> listIterator(int index)

            也返回一个列表迭代器,但是迭代器的起始位置是列表的 index 索引位置。

            代码容易理解:

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

list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");

ListIterator<String> listIterator = list.listIterator(2);

for(; listIterator.hasNext(); ) {
    System.out.println(listIterator.next());
}
结果:
3
4
5

        3、Iterator<E> iterator()

            普通的返回迭代器的方法,该方法继承自 Iterable 接口。

    (九)转换

        1、Object[] toArray()

            将列表中的元素转换为由数组来存储,而元素的顺序可以按照特殊的要求来实现,一般情况是和列表的索引一一对应。

            该方法返回一个新数组,而对新数组的操作对原列表没有任何影响。

        2、<T> T[] toArray(T[] a)

            返回按适当顺序(从第一个元素到最后一个元素)包含列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。如果指定数组能容纳列表,则在其中返回该列表。否则,分配具有指定数组的运行时类型和此列表大小的新数组。此方法和 Collection 接口中的重名方法效果一致,可以在第三篇博客中阅读。

© 著作权归作者所有

共有 人打赏支持
mrbinary
粉丝 1
博文 6
码字总数 6239
作品 0
海淀
程序员
私信 提问
day14_DBUtils学习笔记

一、DBUtils介绍 Apache公司开发的框架。   DBUtils是java编程中的数据库操作实用工具,小巧简单实用。   DBUtils封装了对JDBC的操作,简化了JDBC操作。可以少写代码。 commons-dbutils 是...

黑泽明军
2018/05/20
0
0
Java编程学习:集合框架详解

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
2018/05/30
0
0
[Java 并发编程] 集合框架之 同步容器类 & 并发容器类

吾生也有涯,而知也无涯。———《庄子》 通过上一篇文章,我们已经知道设计一个线程安全类的原则和步骤,以及在设计过程中我们应当注意的细节。实际上,Java 的集合库包含了线程安全集合和非...

seaicelin
2018/05/25
0
0
【JAVA集合框架二 】java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类

本文关键词: java集合框架 框架设计理念 容器 继承层级结构 继承图 集合框架中的抽象类 主要的实现类 实现类特性 集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确定的元...

noteless
2018/07/09
0
0
JSON-lib框架,转换JSON、XML

Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象。 一、 准备工作 1、 首先要去官方...

五大三粗
2015/11/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

npm安装教程

一、使用之前,我们先来掌握3个东西是用来干什么的。 npm: Nodejs下的包管理器。 webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资源的合并...

Bob2100
10分钟前
0
0
Failure to find net.sf.json-lib:json-lib:jar:2.2.2

Could not resolve dependencies for project com.platform:platform-gateway:jar:1.0: Failure to find net.sf.json-lib:json-lib:jar:2.2.2 in http://maven.aliyun.com/nexus/content/gro......

SummerGao
13分钟前
0
0
netty 系列博客

https://blog.csdn.net/tjreal/article/list/2?

Java搬砖工程师
15分钟前
0
0
《大话数据结构》读后总结(二)

一、数据结构基本概念 1. 数据类型 数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。 在C语言中,按照取值的不同,数据类型可以分为两类: 原子类型:是不可以再分解...

徐曙辉
19分钟前
4
0
数据清理的终极指南

我花了几个月的时间分析来自传感器、调查及日志等相关数据。无论我用多少图表,设计多么复杂的算法,结果总是会与预期不同。更糟糕的是,当你向首席执行官展示你的新发现时,他/她总会发现缺...

阿里云官方博客
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部