文档章节

java集合框架总结(四)

开源中国首席灵魂师
 开源中国首席灵魂师
发布于 2016/09/05 17:50
字数 1537
阅读 85
收藏 4

一、java.util.List

List 接口继承了 Collection 接口以定义一个允许重复项的有序集合。该接口不但能够对列
表的一部分进行处理,还添加了面向位置的操作。 
 (1) 面向位置的操作包括插入某个元素或 Collection 的功能,还包括获取、除去或更改元素
的功能。在 List 中搜索元素可以从列表的头部或尾部开始,如果找到元素,还将报告元素所
在的位置 : 

  •  void add(int index, Object element): 在指定位置index上添加元素element 
  •  boolean addAll(int index, Collection c): 将集合c的所有元素添加到指定位置index 
  •  Object get(int index): 返回List中指定位置的元素 
  • int indexOf(Object o): 返回第一个出现元素o的位置,否则返回-1 
  • int lastIndexOf(Object o) :返回最后一个出现元素o的位置,否则返回-1 
  •  Object remove(int index) :删除指定位置上的元素 
  • Object set(int index, Object element) :用元素element取代位置index上的元素,并且返回旧的元素 

 
(2) List 接口不但以位置序列迭代的遍历整个列表,还能处理集合的子集: 

  •  ListIterator listIterator() : 返回一个列表迭代器,用来访问列表中的元素 
  •  ListIterator listIterator(int index) : 返回一个列表迭代器,用来从指定位置index开 始访问列表中的元素 
  •  List subList(int fromIndex, int toIndex) :返回从指定位置fromIndex(包含)到toIndex(不包含)范围中各个元素的列表视图 ,“对子列表的更改(如 add()、remove() 和 set() 调用)对底层 List 也有影响。” 

 
二、ListIterator接口 

ListIterator 接口继承 Iterator 接口以支持添加或更改底层集合中的元素,还支持双向访
问。ListIterator没有当前位置,光标位于调用previous和next方法返回的值之间。一个
长度为n的列表,有n+1个有效索引值: 

  •  void add(Object o): 将对象o添加到当前位置的前面 
  • void set(Object o): 用对象o替代next或previous方法访问的上一个元素。如果上次调用后列表结构被修改了,那么将抛出IllegalStateException异常。 
  •  boolean hasPrevious(): 判断向后迭代时是否有元素可访问 
  • Object previous():返回上一个对象 
  • int nextIndex(): 返回下次调用next方法时将返回的元素的索引 
  • int previousIndex(): 返回下次调用previous方法时将返回的元素的索引 

 “正常情况下,不用ListIterator改变某次遍历集合元素的方向 — 向前或者向后。虽然在
技术上可以实现,但previous() 后立刻调用next(),返回的是同一个元素。把调用 next()
和previous()的顺序颠倒一下,结果相同。” 
 

我们还需要稍微再解释一下 add() 操作。添加一个元素会导致新元素立刻被添加到隐式光
标的前面。因此,添加元素后调用 previous() 会返回新元素,而调用 next() 则不起作用,
返回添加操作之前的下一个元素。” 


三、AbstractList和AbstractSequentialList抽象类 

有两个抽象的 List 实现类:AbstractList 和 AbstractSequentialList。像 AbstractSet 类
一样,它们覆盖了 equals() 和 hashCode() 方法以确保两个相等的集合返回相同的哈希码。
若两个列表大小相等且包含顺序相同的相同元素,则这两个列表相等。这里的 hashCode() 实
现在 List 接口定义中指定,而在这里实现。 
 
除了equals()和hashCode(),AbstractList和 AbstractSequentialList实现了其余 List 方
法的一部分。因为数据的随机访问和顺序访问是分别实现的,使得具体列表实现的创建更为容
易。需要定义的一套方法取决于您希望支持的行为。您永远不必亲自 提供的是 iterator方
法的实现。 
 

四、LinkedList类和ArrayList类 


在“集合框架 ”中有两种常规的 List 实现:ArrayList 和 LinkedList。使用两种 List 实
现的哪一种取决于您特定的需要。如果要支持随机访问,而不必在除尾部的任何位置插入或除
去元素,那么,ArrayList 提供了可选的集合。但如果,您要频繁的从列表的中间位置添加和
除去元素,而只要顺序的访问列表元素,那么,LinkedList 实现更好。 
 
“ArrayList 和 LinkedList 都实现 Cloneable 接口,都提供了两个构造函数,一个无参的,
一个接受另一个Collection” 
 
(1)、LinkedList类 
 
LinkedList类添加了一些处理列表两端元素的方法。 

  • void addFirst(Object o): 将对象o添加到列表的开头 
  • void addLast(Object o):将对象o添加到列表的结尾 
  • Object getFirst(): 返回列表开头的元素 
  • Object getLast(): 返回列表结尾的元素 
  •  Object removeFirst(): 删除并且返回列表开头的元素 
  • Object removeLast():删除并且返回列表结尾的元素
  • LinkedList(): 构建一个空的链接列表 
  • LinkedList(Collection c): 构建一个链接列表,并且添加集合c的所有元素 

 
“使用这些新方法,您就可以轻松的把 LinkedList 当作一个堆栈、队列或其它面向端点的数
据结构。” 
 
(2)、ArrayList类 
 
ArrayList类封装了一个动态再分配的Object[]数组。每个ArrayList对象有一个capacity。
这个capacity表示存储列表中元素的数组的容量。当元素添加到ArrayList时,它的capacity
在常量时间内自动增加。 
 
在向一个ArrayList对象添加大量元素的程序中,可使用ensureCapacity方法增加capacity。
这可以减少增加重分配的数量。

  • void ensureCapacity(int minCapacity): 将ArrayList对象容量增加minCapacity 
  • void trimToSize(): 整理ArrayList对象容量为列表当前大小。程序可使用这个操作减少ArrayList对象存储空间。 

(3).、RandomAccess接口 
 一个特征接口。该接口没有任何方法,不过你可以使用该接口来测试某个集合是否支持有效的
随机访问。ArrayList和Vector类用于实现该接口

© 著作权归作者所有

开源中国首席灵魂师
粉丝 19
博文 44
码字总数 41547
作品 0
徐汇
程序员
私信 提问
Java集合框架(一)——集合概述

本文概述 本篇文章将分三块内容对Java中的集合框架进行介绍: 一. 集合框架相关概念 二. 集合体系通用方法 三. 集合遍历—Iteractor 一. 集合框架相关概念 集合:用于存储多个对象的容器 1....

Mr_Yanger
2017/11/11
0
0
Java程序员从笨鸟到菜鸟全部博客目录【2012年十一月七日更新】

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,...

长平狐
2012/11/12
212
0
《Java程序员由笨鸟到菜鸟》电子版书正式发布,欢迎大家下载

在众多朋友的支持和鼓励下,《Java程序员由菜鸟到笨鸟》电子版终于和大家见面了。本电子书涵盖了从java基础到javaweb开放框架的大部分内容。在编写的过程中,难免会出现一些错误,希望大家能...

长平狐
2012/11/12
254
0
《Java程序员由笨鸟到菜鸟》电子版书正式发布,欢迎大家下载

在众多朋友的支持和鼓励下,《Java程序员由菜鸟到笨鸟》电子版终于和大家见面了。本电子书涵盖了从java基础到javaweb开放框架的大部分内容。在编写的过程中,难免会出现一些错误,希望大家能...

长平狐
2012/11/12
144
0
泥沙砖瓦浆木匠/java-core-learning-example

感谢赞助的ta们 Java 核心系列教程,关于Java核心技术学习积累的例子,是初学者及核心技术巩固的最佳实践。 包括基础语法,OOP,字符串,集合,IO,反射,线程,网络等。 未完成模块:阿里J...

泥沙砖瓦浆木匠
04/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Git 分支管理规范

Git 仓库申请流程 开发主管向 Git 管理员提交 Git 仓库申请【邮件:发送给 Git 管理员,抄送给项目经理,申请表可向 Git 管理员获取】 Git 管理员审批开发主管的申请,审批以下具体信息: 审批...

物种起源-达尔文
12分钟前
3
0
浅谈iterator迭代器模式

一、前言 设计模式有很多,最典型的是GoF的23种设计模式,听起来很多,其实大部分我们都是见过的,按照常见度来分,最常用的差不多是六七个吧,因此,我们在学习的时候应该有轻重缓急之分,不...

青衣霓裳
12分钟前
3
0
Spring Boot2 系列教程(二)创建一个 Spring Boot 项目的三种方法

我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如下图: 2017 年由于种种原因,就没有再继续更新 Spring B...

江南一点雨
14分钟前
3
0
熟练掌握这5个Excel技巧,只加薪不加班

月初月报的整理,周一周报的整理都离不开Excel,有的同事只要10分钟搞定,也有同事花费一上午时间整理报表,这样对比起来,时间差是很大的。那怎样快速对Excel表中的数据进行整理呢? 1.快速...

干货趣分享
19分钟前
3
0
总结:SpringCloud

一、Eureka Eureka 是 Netflix 开发的,一个基于 REST 服务的,服务注册与发现的组件 它主要包括两个组件:Eureka Server 和 Eureka Client Eureka Client:一个Java客户端,用于简化与 Eure...

浮躁的码农
28分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部