- 浏览: 77084 次
- 性别:
- 来自: 大连
文章分类
最新评论
2.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 也有影响。”
2.1.ListIterator接口
ListIterator 接口继承 Iterator 接口以支持添加或更改底层集合中的元素,还支持双向访问。ListIterator没有当前位置,光标位于调用previous和next方法返回的值之间。一个长度为n的列表,有n+1个有效索引值:
(1) void add(Object o): 将对象o添加到当前位置的前面
void set(Object o): 用对象o替代next或previous方法访问的上一个元素。如果上次调用后列表结构被修改了,那么将抛出IllegalStateException异常。
(2) boolean hasPrevious(): 判断向后迭代时是否有元素可访问
Object previous():返回上一个对象
int nextIndex(): 返回下次调用next方法时将返回的元素的索引
int previousIndex(): 返回下次调用previous方法时将返回的元素的索引
“正常情况下,不用ListIterator改变某次遍历集合元素的方向 — 向前或者向后。虽然在技术上可以实现,但previous() 后立刻调用next(),返回的是同一个元素。把调用 next()和previous()的顺序颠倒一下,结果相同。”
“我们还需要稍微再解释一下 add() 操作。添加一个元素会导致新元素立刻被添加到隐式光标的前面。因此,添加元素后调用 previous() 会返回新元素,而调用 next() 则不起作用,返回添加操作之前的下一个元素。”
2.2.AbstractList和AbstractSequentialList抽象类
有两个抽象的 List 实现类:AbstractList 和 AbstractSequentialList。像 AbstractSet 类一样,它们覆盖了 equals() 和 hashCode() 方法以确保两个相等的集合返回相同的哈希码。若两个列表大小相等且包含顺序相同的相同元素,则这两个列表相等。这里的 hashCode() 实现在 List 接口定义中指定,而在这里实现。
除了equals()和hashCode(),AbstractList和AbstractSequentialList实现了其余 List 方法的一部分。因为数据的随机访问和顺序访问是分别实现的,使得具体列表实现的创建更为容易。需要定义的一套方法取决于您希望支持的行为。您永远不必亲自提供的是 iterator方法的实现。
2.3. LinkedList类和ArrayList类
在“集合框架”中有两种常规的 List 实现:ArrayList 和 LinkedList。使用两种 List 实现的哪一种取决于您特定的需要。如果要支持随机访问,而不必在除尾部的任何位置插入或除去元素,那么,ArrayList 提供了可选的集合。但如果,您要频繁的从列表的中间位置添加和除去元素,而只要顺序的访问列表元素,那么,LinkedList 实现更好。
“ArrayList 和 LinkedList 都实现 Cloneable 接口,都提供了两个构造函数,一个无参的,一个接受另一个Collection”
2.3.1. LinkedList类
LinkedList类添加了一些处理列表两端元素的方法。
(1) void addFirst(Object o): 将对象o添加到列表的开头
void addLast(Object o):将对象o添加到列表的结尾
(2) Object getFirst(): 返回列表开头的元素
Object getLast(): 返回列表结尾的元素
(3) Object removeFirst(): 删除并且返回列表开头的元素
Object removeLast():删除并且返回列表结尾的元素
(4) LinkedList(): 构建一个空的链接列表
LinkedList(Collection c): 构建一个链接列表,并且添加集合c的所有元素
“使用这些新方法,您就可以轻松的把 LinkedList 当作一个堆栈、队列或其它面向端点的数据结构。”
2.3.2. ArrayList类
ArrayList类封装了一个动态再分配的Object[]数组。每个ArrayList对象有一个capacity。这个capacity表示存储列表中元素的数组的容量。当元素添加到ArrayList时,它的capacity在常量时间内自动增加。
在向一个ArrayList对象添加大量元素的程序中,可使用ensureCapacity方法增加capacity。这可以减少增加重分配的数量。
(1) void ensureCapacity(int minCapacity): 将ArrayList对象容量增加minCapacity
(2) void trimToSize(): 整理ArrayList对象容量为列表当前大小。程序可使用这个操作减少ArrayList对象存储空间。
2.3.2.1. RandomAccess接口
一个特征接口。该接口没有任何方法,不过你可以使用该接口来测试某个集合是否支持有效的随机访问。ArrayList和Vector类用于实现该接口。
3.Set接口
Set 接口继承 Collection 接口,而且它不允许集合中存在重复项,每个具体的 Set 实现类依赖添加的对象的 equals()方法来检查独一性。Set接口没有引入新方法,所以Set就是一个Collection,只不过其行为不同。
3.1. Hash表
Hash表是一种数据结构,用来查找对象。Hash表为每个对象计算出一个整数,称为Hash Code(哈希码)。Hash表是个链接式列表的阵列。每个列表称为一个buckets(哈希表元)。对象位置的计算 index = HashCode % buckets (HashCode为对象哈希码,buckets为哈希表元总数)。
当你添加元素时,有时你会遇到已经填充了元素的哈希表元,这种情况称为Hash Collisions(哈希冲突)。这时,你必须判断该元素是否已经存在于该哈希表中。
如果哈希码是合理地随机分布的,并且哈希表元的数量足够大,那么哈希冲突的数量就会减少。同时,你也可以通过设定一个初始的哈希表元数量来更好地控制哈希表的运行。初始哈希表元的数量为 buckets = size * 150% + 1 (size为预期元素的数量)。
如果哈希表中的元素放得太满,就必须进行rehashing(再哈希)。再哈希使哈希表元数增倍,并将原有的对象重新导入新的哈希表元中,而原始的哈希表元被删除。load factor(加载因子)决定何时要对哈希表进行再哈希。在Java编程语言中,加载因子默认值为0.75,默认哈希表元为101。
3.2. Comparable接口和Comparator接口
在“集合框架”中有两种比较接口:Comparable接口和Comparator接口。像String和Integer等Java内建类实现Comparable接口以提供一定排序方式,但这样只能实现该接口一次。对于那些没有实现Comparable接口的类、或者自定义的类,您可以通过Comparator接口来定义您自己的比较方式。
3.2.1. Comparable接口
在java.lang包中,Comparable接口适用于一个类有自然顺序的时候。假定对象集合是同一类型,该接口允许您把集合排序成自然顺序。
(1) int compareTo(Object o): 比较当前实例对象与对象o,如果位于对象o之前,返回负值,如果两个对象在排序中位置相同,则返回0,如果位于对象o后面,则返回正值
在 Java 2 SDK版本1.4中有二十四个类实现Comparable接口。下表展示了8种基本类型的自然排序。虽然一些类共享同一种自然排序,但只有相互可比的类才能排序。
类 | 排序 |
BigDecimal,BigInteger,Byte, Double, Float,Integer,Long,Short | 按数字大小排序 |
Character | 按 Unicode 值的数字大小排序 |
String | 按字符串中字符 Unicode 值排序 |
利用Comparable接口创建您自己的类的排序顺序,只是实现compareTo()方法的问题。通常就是依赖几个数据成员的自然排序。同时类也应该覆盖equals()和hashCode()以确保两个相等的对象返回同一个哈希码。
3.2.2. Comparator接口
若一个类不能用于实现java.lang.Comparable,或者您不喜欢缺省的Comparable行为并想提供自己的排序顺序(可能多种排序方式),你可以实现Comparator接口,从而定义一个比较器。
(1)int compare(Object o1, Object o2): 对两个对象o1和o2进行比较,如果o1位于o2的前面,则返回负值,如果在排序顺序中认为o1和o2是相同的,返回0,如果o1位于o2的后面,则返回正值
“与Comparable相似,0返回值不表示元素相等。一个0返回值只是表示两个对象排在同一位置。由Comparator用户决定如何处理。如果两个不相等的元素比较的结果为零,您首先应该确信那就是您要的结果,然后记录行为。”
(2)boolean equals(Object obj): 指示对象obj是否和比较器相等。
“该方法覆写Object的equals()方法,检查的是Comparator实现的等同性,不是处于比较状态下的对象。”
发表评论
-
NIO2
2010-02-03 22:50 1201对文件进行分割与组合: -c 组合 -s 分割 例如: ... -
NIO
2010-02-02 23:42 1028很久没有使用IO进行处理文件了,虽然很简单,不过自己也写了一个 ... -
正则表达式
2010-01-27 13:49 927做了一个关于邮箱验证的正则表达式 /** Email的 ... -
Java那么点事
2010-01-25 15:13 967public class Customer extends P ... -
java 初学者可能犯的错误
2010-01-18 22:16 1227在编程过程中,我们可 ... -
JAVA中浅复制与深复制
2009-08-04 18:21 9611.概念: 浅复制与深复制概念⑴浅复制(浅克隆)被复制对象的 ... -
1.3 添加到Java 5中的语言特性 - 《Java高级编程(JDK6版)》
2009-07-27 22:30 19771.3 添加到Java 5中的语言特性 Java ... -
深入理解JMM的重点
2009-07-24 22:16 958JMM具体规定要JLS的 "Thread and l ... -
问题总结
2009-06-29 16:01 903对于这个系列里的问题,每个学Java的人都应该搞懂。当然 ... -
java 自动装箱与拆箱中的陷阱
2009-06-29 12:36 1409自动装箱与拆箱的功能 ... -
Cookie和Session专题
2009-05-22 13:44 868一、cookie机制和session机制的区别******** ... -
java的String类,equals函数和比较操作符==的区别
2009-05-07 12:44 961整理关于java的String类,equals函数和比较操 ... -
理解java String
2009-05-06 19:08 738要理解 java中String的运作方式,必须明确一点:Str ... -
Array的copy总结
2009-05-06 16:44 0今天看了一片文章,说的是数组的copy,学习心得体验一下: ... -
Java基本功——Reference
2009-05-05 17:23 803Java基本功——Reference ... -
java参数传递时到底是值传递还是引用传递
2009-05-05 17:12 2081当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属 ... -
UML之继承、实现、依赖、关联、聚合、组合
2009-05-04 13:47 1250这是一堂关于UML基础 ... -
java中的构造方法的深入了解
2009-05-04 13:29 960很长时间对与构造方法没有很深的认识,但看过一篇介绍他的文章后感 ... -
JAVA,你真的熟悉了吗?
2009-03-21 10:11 922时常看到一些人说掌握 ... -
IO的用法
2009-02-02 15:36 1817一. Input和Output 1. stream代表 ...
相关推荐
Java集合框架是Java编程语言中的一个核心特性,它为存储、管理和操作对象提供了一套统一的接口和实现。这个框架包括各种接口、类和算法,使得开发者能够更加高效地处理对象集合,而无需关注底层数据结构的实现细节。...
Java集合框架是Java编程语言中不可或缺的一部分,它提供了一种高效、灵活的方式来存储和操作数据。这个框架包括了各种接口和类,它们为开发者提供了多种数据结构,如数组、链表、队列、堆栈、映射等。下面将详细探讨...
全面接触Java集合框架意味着要深入理解其核心接口、实现类以及它们在实际编程中的应用。 1. **接口概述**: - `Collection`:集合框架的顶级接口,所有单列集合(如List、Set)的父接口。 - `List`:有序、可重复...
Java集合框架是Java编程语言中的核心部分,它提供了一种高效、灵活的数据存储和操作机制。这个知识体系包括了各种接口和类,如List、Set、Map等,以及它们的实现类,如ArrayList、LinkedList、HashSet、HashMap等。...
- 全面介绍了Java集合框架的各种组件,包括List、Set、Map等。 - 通过实例讲解了集合类的最佳使用方法。 - 探讨了Java集合框架背后的设计原则和模式,如迭代器模式等。 - **适用人群**:本书适用于那些希望深入...
随着学习的深入,还会接触到类、对象、异常处理、IO流、集合框架、多线程、网络编程等更复杂的话题。对于Java的学习,实践是关键,通过编写实际的代码来加深理解,才能更好地掌握这门强大的编程语言。
例如,`java.util`包中的ArrayList和HashMap是Java集合框架中的重要组成部分,它们分别提供了动态数组和键值对的存储功能;`java.io`包提供了文件读写、数据流处理的能力;`java.net`包则支持网络通信,如Socket和...
总的来说,《Java 2全方位学习》是一本全面覆盖Java基础与进阶知识的教材,无论你是刚接触Java的新手,还是希望巩固提高的开发者,都能从中受益。通过阅读和实践,你可以逐步掌握这个强大而广泛应用的编程语言,为你...
此外,你还会接触到Java集合框架中的ArrayList、HashMap等数据结构,学习如何进行线程同步和网络通信。 其次,课件PPT提供了理论教学的支持,它通常会按照章节划分,详细讲解Java的基础概念、关键字、语法规则和...
5. **集合框架**:Java集合框架是存储和管理对象的重要工具,包括List、Set、Queue和Map接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。学习者需要掌握它们的特性和用法。 6. **多线程**:Java内置对...
"ext教程.rar"可能涉及Java的扩展库或框架的学习,如JQuery、EXTJS或其他第三方库。这些库通常能够提升开发效率,为Java应用添加丰富的功能和界面元素。 "java技术从入门到精通(孙鑫)学习笔记.rar"是基于知名Java...
标题中的“java程序设计例题全集”意味着这份资料包含了大量关于Java编程的实践题目,这些题目可能包括基础语法、类与对象、异常处理、集合框架、多线程、网络编程等多个方面,是学习和巩固Java编程技能的理想资源。...
此外,文件操作、异常处理、集合框架(如ArrayList、LinkedList、HashMap等)以及IO流也是Java基础学习的重要组成部分。Oracle是Java的主要提供商,其JDK(Java Development Kit)包含了Java运行环境和开发工具,...
它包括了类库,如集合框架、I/O流、多线程、网络编程和异常处理等。理解这些概念对于任何Java开发者来说都是至关重要的。例如,集合框架允许有效地存储和管理数据,而多线程则能够让你编写并发程序,提高效率。 ...
总的来说,从“Java从入门到精通视频教程(全94讲)学习笔记整理”中,我们可以看到一个全面的Java学习路线,从基础语法、面向对象编程,到高级特性、实战项目,都是成为一名合格Java开发者不可或缺的部分。...
4. **集合框架**:Java集合框架包括接口(如List、Set、Queue)和实现类(如ArrayList、LinkedList、HashSet、HashMap等),学习者应掌握它们的使用和选择原则。 5. **输入输出流**:I/O流用于处理数据的读写,包括...
【Lesson10】可能是关于Java的高级主题,比如多线程、并发编程、同步机制,或者是Java集合框架的深入研究,例如Map接口和并发容器如ConcurrentHashMap。 通过这个【JAVA电子书】,读者不仅能够学习到Java语言的基础...
3. **集合框架**:Java集合框架是管理和操作对象数组的工具,包括List、Set和Map接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。理解它们之间的区别和使用场景,以及迭代器、泛型、并发集合等高级特性...
Java集合框架是存储和管理对象的重要工具,包括List、Set、Map接口及其实现类,如ArrayList、LinkedList、HashSet、HashMap等。了解它们的特性和适用场景,可以有效优化代码性能。 并发是Java的强项,Java提供了...
Java集合框架则提供了大量的容器类,如ArrayList、LinkedList、HashSet、HashMap等,用于存储和操作对象。 线程编程是Java的一大特色,它使得程序可以同时执行多个任务。通过理解和使用Thread类以及Runnable接口,...