一、总结
1. 所有Java集合类都位于java.util包中,与Java数组不同,Java集合中不能存放基本数据类型,只能存放对象的引用。
2. Set、List、Map统称为Java集合。
3.
在将对象存储到集合类中时,为加快存储速度,要求被在座对象的类中必须覆盖equals()方法和hashCode()方法。即如果一个类重新实现了
equals()方法,那么也应该重新实现hashCode()方法,并且保证当两个对象相等时,它们的哈希码也相同。
4. <? extends Object> 对集合类的范型设定了上限,表示接受Object类型及其子类型。
<? super String> 对集合类的范型设定了下限,表示接受String类型及其父类型。
5. 遍历集合可使用“for(Type t : c){…}”语法,其中c表示需要遍历的集合,Type表示集合内元素的类型,t引用每次从集合中取出的当前元素。
6. 对于Java集合,还有一个实用类,即java.util.Collections,它的一部分方法专门用于操纵List类型集合,还有一部分方法可用于操纵所有的Collection类型或Map类型集合。
二、Collection和Iterator接口
1. Collection接口的方法
方法
|
描述
|
boolean add(Object o)
|
向集合中加入一个对象的引用
|
void clear()
|
删除集合中的所有对象,即不再持有这些对象的引用
|
boolean contains(Object o)
|
判断在集合中是否持有特定对象的引用
|
Iterator iterator()
|
返回一个Iterator对象,可用它来遍历集合中的元素
|
boolean remove(Object o)
|
从集合中删除一个对象的引用
|
int size()
|
返回集合中元素的数目
|
Object[] toArray()
|
返回一个数组,该数组包含集合中的所有元素
|
boolean isEmpty()
|
判断集合是否为空
|
注:Set接口和List接口继承了Collection接口,而Map接口没有继承Collection接口,所以Set对象和List对象可以调用以上方法,但Map对象不能调用以上方法。
2. Iterator接口中声明了以下方法:
a) hasNext():判断集合中的元素是否遍历完毕,如果没有,就返回true。
b) next():返回下一个元素。
c) remove():从集合中删除上一个由next()方法返回的元素。
3. 如果集合中的元素没有排序,Iterator遍历集合中元素的顺序是任意的,并不一定与向集合中加入元素的顺序保持一致。
4.
当通过Collection集合的iterator()方法得到一个Iterator对象后,如果当前线程或其他线程接着又通过Collection集合
的一些方法对集合进行了修改操作(调用当前Iterator对象的remove()方法来修改集合除外),接下来访问这个Iterator对象的
next()方法会导致java.util.ConcurrentModificationException运行时异常。
三、Set(集)
1.
Set接口主要有两个实现类:HashSet和TreeSet。HashSet类有一个子类LinkedHashSet类,它不仅实现了哈希算法,而且实
现了链表数据结构。TreeSet类实现了SortedSet接口,具有排序功能。此外还有一个以数组为基础实现的Set类
CopyOnWriteArraySet。
2. Set系列类的方法不支持插入和修改。同时Set集合中不能有重复的对象。
3. Set采用对象的equals()方法比较两个对象是否相等,即判断这个某个对象是否已经存在于集合中。
4. 当向集合中加入一个对象时,HashSet会调用对象的hashCode()方法来获得哈希码,然后根据这个哈希码进一步计算出对象在集合中的存放位置。
5. TreeSet支持两种排序方式:自然排序和客户化排序。在默认情况下,TreeSet采用自然排序方式。
6. TreeSet调用对象的compareTo()方法比较集合中对象的大小 ,然后进行升序排列,这种排序方式称为自然排序。使用自然排序时,只能向TreeSet集合中加入同类型的对象,并且这些对象的类必须实现了Comparable接口。
7. 最适合TreeSet排序的是不可变类。
8.
TreeSet类支持客户化排序,可以先创建一个实现java.util.Comparator<Type>接口的
类,<Type>指定被比较的对象的类型,Comparator有个compare(Type x,Type
y)方法,用于比较两个对象的大小。当compare(x,y)的返回值大于0时,表示x>y,返回值小于0时,表示x<y,返回值等于0
时,表示x等于y。示例代码如下:
import
java.util.Comparator;
import
java.util.Iterator;
import
java.util.Set;
import
java.util.TreeSet;
public
class
CustomerComparator
implements
Comparator
{
public
int
compare(Customer
x,Customer
y){
if
(x.getName().compareTo(y.getName()) > 0)
return
-1;
if
(x.getName().compareTo(y.getName()) <0 )
return
1;
return
0;
}
public
static
void
main(String[] args) {
Set<Customer
> set = new
TreeSet<Customer>(
new
CustomerComparator())
;
Customer
customer1 = new
Customer
("Tom",15);
Customer
customer2 = new
Customer
("Jack",16);
Customer
customer3 = new
Customer
("Mary",26);
set.add(customer1);
set.add(customer2);
set.add(customer3);
Iterator<Customer
> it = set.iterator();
while
(it.hasNext()){
Customer
customer = it.next();
System.out
.println(customer.getName()+" "+customer.getAge());
}
}
}
|
四、List(列表)
1.
List中的元素以线性方式存储,集合中允许存放重复对象。List接口的主要的实现类有ArrayList(长度可变的数组)和
LinkedList(链表)。并且LinkedList单独具有addFirst()、addLast()、getFirst()、
getLast()、removeFirst()、removeLast()方法,这些方法使得LinkedList可以作为堆栈、队列和双向队列来使
用。
2. List只能对集合中的对象按索引位置排序,如果想要对List中的对象按其他特定方式排序,可以借助Comparator接口和Collections类中的sort方法。
3. List的listIterator()方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,此外还提供了专门操纵列表的方法:
add()
|
向列表中插入一个元素
|
hasNext()
|
判断列表中是否还有下一个元素
|
hasPrevious()
|
判断列表中是否还有上一个元素
|
next()
|
返回列表中的下一个元素
|
previous()
|
返回列表中的上一个元素
|
4.
java.util.Arrays类的asList()方法能够把一个java数组包装为一个List对象,这个List对象代表固定长度的数组,所有对
List对象的操作都会被作用到底层的java数组,因此不能调用这种List对象的add()和remove()方法。
五、Map(映射)
1. Map的entrySet()方法返回一个Set集合,在这个集合中存放了Map.Entry类型的元素,每个Map.Entry对象代表Map中的一对键与值。
2.
Map有两种比较常用的实现,HashMap和TreeMap,另外还有以链表和哈希表为基础实现的LinkedHashMap类。使用HashMap
时,改写了equals()方法时,同时要改写hashCode()方法;TreeMap实现了SortedMap接口,能对键对象进行排序,支持自然排
序和客户化排序。如果要对键进行客户化排序,可调用它的TreeMap(Comparator
comparator)构造方法,参数comparator指定具体的排序方式。
3. Map的keySet()方法返回集合中所有键对象的集合。
来自:http://www.cnblogs.com/jerrychoi/archive/2010/03/12/1684395.html
分享到:
相关推荐
经典---JAVA设计模式经典---JAVA设计模式
简介:本系列的前一篇文章讨论了智能卡的相关知识,此篇文章则将着重介绍 JAVA 卡的一些基础知识,如 JAVA 卡的概念、结构和生命期,JAVA 卡的 JAVA 语言和编程接口(API),并通过一个简单的Applet示例引入对 JAVA卡...
论坛转帖工具 .......... 纯HTML
一键转帖 一键8经验签到. 绿易贴吧工具3.7 11.11版.rar
编辑人员转帖去水印工具,很好用,直接选中水印区域后运行伪装即可!
转帖性能测试
UBB论坛转帖圣手.exeUBB论坛转帖圣手.exe
J2ME全方位开发讲解基础汇总[转帖] 一、J2ME中需要的Java基础知识 现在有大部分人,都是从零开始学J2ME的,学习J2ME的时候,总是从Java基础开始学习,而且现在讲Java基础的书籍中都是以J2SE来讲基础,这就给学习造成...
discuz X2转帖工具、采集工具,discuz论坛批量发帖,批量转帖工具
这是一个世界编程大赛第一名写的程序,很好玩的,大家试试看。
1.修改自Convert X转帖工具 2.新增批量替换关键词(原来是单个词语替换,可以利用这个功能删除一些网站的防转帖代码) 3.批量随机新增文字(新增内容可自定义,从而实现伪原创) 4.cookie记录替换和新增关键词(避免每次...
Html2UBBMaxcj_Softii论坛专用转帖工具
转帖图片提取工具可以对论坛图片附件信息进行清除,只保留图片代码,操作很简单,推荐有需要转帖图片工具的朋友下载 转帖图片提取工具使用方法: 将IP138上处理过的东西复制到上方的编辑框内,点击只要图片,下面...
gl8雨刮维修以及调试转帖.doc
转帖PLCDCSFCS三大控制系统的特点和差异.doc
关于工作与生活的转帖 一篇论述精辟的文章,值得一看。
用PHP批量生成图片缩略图——活跃论坛转帖
看到论坛里帖子由精美的图片想转过来,或者批量提取地址时很好用
轻松转帖之突破网页复制限制宣贯.pdf