Java集合.docx

上传人:b****5 文档编号:14392888 上传时间:2023-06-23 格式:DOCX 页数:27 大小:26.60KB
下载 相关 举报
Java集合.docx_第1页
第1页 / 共27页
Java集合.docx_第2页
第2页 / 共27页
Java集合.docx_第3页
第3页 / 共27页
Java集合.docx_第4页
第4页 / 共27页
Java集合.docx_第5页
第5页 / 共27页
Java集合.docx_第6页
第6页 / 共27页
Java集合.docx_第7页
第7页 / 共27页
Java集合.docx_第8页
第8页 / 共27页
Java集合.docx_第9页
第9页 / 共27页
Java集合.docx_第10页
第10页 / 共27页
Java集合.docx_第11页
第11页 / 共27页
Java集合.docx_第12页
第12页 / 共27页
Java集合.docx_第13页
第13页 / 共27页
Java集合.docx_第14页
第14页 / 共27页
Java集合.docx_第15页
第15页 / 共27页
Java集合.docx_第16页
第16页 / 共27页
Java集合.docx_第17页
第17页 / 共27页
Java集合.docx_第18页
第18页 / 共27页
Java集合.docx_第19页
第19页 / 共27页
Java集合.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Java集合.docx

《Java集合.docx》由会员分享,可在线阅读,更多相关《Java集合.docx(27页珍藏版)》请在冰点文库上搜索。

Java集合.docx

Java集合

Java数据结构

与数据结构相关的系统接口

一.概述

1.Java2的集合包含2大类型

Collection接口,Map接口

2.接口元素特点及其实现类

接口

接口特点

实现了接口的类

Set(Collection的子接口)

元素不允许重复,且元素有序

HashSet,TreeSet

List(Collection的子接口)

元素可以重复,且无序

ArrayList,LinkdList,Vector(Stack)

Map

元素不允许重复,且元素为Key—Value对

HashMap,TreeMap,Hashtable

3.集合所在的包

对集合操作的接口和类在Java.util包中

二.Collection接口及其子接口

Collection接口包含两个字接口:

List接口和Set接口,其定义如下:

publicinterfaceSetextendsCollection{}

publicinterfaceListextendsCollection{}

1.Collection接口

它是构建集合框架的基础。

定义:

publicinterfaceCollectionextendsIterable{

//方法略

}

Collection接口方法

描述

booleanadd(Objecto)

添加对象obj到集合中,成功,返回true,如果obj已经是集合中的元素,则返回false

booleanaddAll(Collectionc)

计算两个集合的并集

booleancontains(Objectobj)

集合包含obj,返回true,否则返回false

booleancontainsAll(Collectionc)

本集合包含集合c,返回true,否则返回false

voidclear()

从集合中删除所有元素

booleanequals(Objectobj)

集合与obj相等,返回true,否则返回false

booleanremove(Objectobj)

从集合中删除obj

booleanremoveAll(Collectionc)

计算两个集合的差集

intsize()

返回集合中元素总数

booleanisEmpty()

集合中没有任何元素,返回true

Object[]toArray()

以数组形式返回集合中的元素

Object[]toArray(Object[]a)

拷贝集合中的元素到数组a,并返回a

booleanretainAll(Collectionc)

计算两个集合的交集

Iteratoriterator()

返回迭代器,用于遍历集合元素

2.List接口

它增强了Collection接口的功能:

其特点为:

元素的有序性,每一个List元素都有唯一索引值

通过List可以获得ListIterator来访问List,从而增强了对集合操作的灵活性。

定义:

publicinterfaceListextendsCollection{

//方法略

}

List接口的主要增强方法

方法

说明

Objectadd(intindex,Objectobj)

在索引为index的位置添加添加元素obj

Objectget(intindex)

获得索引为index位置处的元素

IntindexOf(Objectobj)

正向查找元素obj

IntlastIndexOf(Objectobj)

逆向查找元素obj

ListIteratorlistIterator()

返回ListIterator迭代器

Objectremove(intindex)

删除索引为index的元素

Objectset(intindex,Objectobj)

修改索引为index的位置处的元素值为obj

3.Iterator接口

ListIterator的主要方法

方法

说明

booleanhasNext() 

集合中有下一个元素,返回true,否则返回false

objectnext()

 返回下一个元素

voidremove() 

删除下一个元素

说明:

该接口用于遍历集合

使用时,应当首先用方法hasNext()检查是否在集合中还有元素,否则可能抛出

NoSuchElementException异常

例如:

classStudent

{

StringName;

LongID,

IntScore;

PublicStudent(Stringname,longid,intScore)

{

Name=name;

ID=id;

This.Score=Score;

}

publicvoidmain(String[]args)

{

HashSetset=newHashSet();

Set.add(newStudent(“Sun”,123,80));

Set.add(newStudent(“compaqu”,127,99));

set.add(newStudent(“jack”,125,89));

Iteratorite=set.iterator();//获得迭代器

while(ite.hasNext()){

Studentst=(Student)ite.next();

System.out.println(st.Name);

}

}

练习:

封装一个类Family,用来表示一个当今中国的一个典型的家庭,并实现Iterator接口,从而可以实现对家庭成员的迭代。

4.ListIterator接口

ListIterator的主要方法

方法

说明

Objectadd(intindex,Objectobj)

在索引为index的位置添加添加元素obj

Objectadd(Objectobj)

向集合中添加元素obj

Objectget(intindex)

获得索引为index位置处的元素

booleanhasNext()

集合中有后继元素返回true

Objectnext()

获得集合中当前元素的后继元素

booleanhasPrevious()

集合中有前驱元素返回true

IntnextIndex()

获得下一元素的索引(丛1开始)

Objectprevious()

获得集合中当前元素的前驱元素

intprevioustIndex()

获得前一元素的索引

voidremove()

删除当前元素

Objectset(Objectobj)

修改当前位置处的元素值为obj

说明

除了Iterator接口已经具备的方法外,还提供了一些增强型的方法,

该接口用于遍历集合,不仅可以向前遍历也可以向后遍历。

三.集合的实现类

(一).Set接口的实现类

包含HashSet和TreeSet两个类.。

其元素不允许重复

HashSet在数据组织上类似于数学的集合,可以进行”并”,”交”,”补”运算

TreeSet具有排序功能。

1.HashSet类

1.1.构造函数

HashSet()

HashSet(intinitCapacity)initCapacity初始容量

HashSet()//泛型表示法。

E表示元素类型(任意类型)

HashSet(intinitCapacity)initCapacity初始容量

1.2.常用方法

1.2.1添加元素

booleanadd(objectobj);

1.2.2.删除元素

booleanremove(objectobj);

voidclear();删除集合中所有元素

1.2.3.检查元素是否在集合中

booleancontains(objectobj);true表示集合包含obj

booleancontainsAll(HashSetset);true表示集合包含另一个集合set

1.2.4.检查集合是否为空

booleanisEmpty(objectobj);true表示集合为空

1.2.5.获得集合中元素总数

intsize();

1.2.6.返回数组

Object[]toArray()

1.2.7.克隆对象

Objectclone()//获得集合对象的一份拷贝。

与原集合没有任何关系

1.2.8.求两个集合的并集

booleanaddAll(HashSetset)计算本集合与参数set指定的集合的并集

1.2.9.求两个集合的交集

booleanretainAll(HashSetset)计算本集合与参数set指定的集合的交集

1.2.10.求两个集合的差集

booleanremoveAll(HashSetset)计算本集合与参数set指定的集合的差集

2.。

TreeSet类

TreeSet是实现Set接口的类,它的大部分方法都是接口方法的实现,TreeSet类创建的对象称为树集.树集是由一些节点组成的数据结构,该节点一层一层的排列。

该集合具有根据

其元素进行排序的功能。

适合于排序。

2.1。

构造函数

TreeSet()//默认节点对象按字典顺序排列。

TreeSet(Comparatorc)//按Comparator对元素排列。

Comparator为一个比较器

接口。

2.2.。

方法:

2.2.1.添加节点

booleanadd(Objectobj)

为TreeSet对象添加节点后,节点将按字典顺序或自定义规则排列,由构造函数决定。

返回true,表示添加成功。

如果要按自定义的方式排列,则添加的对象必须实现Comparable接口(该接口只有一个方法

intcompareTo(Objectobj)当本对象

本对象>obj时,返回正数

2.2.2.删除节点

remove(Objectobj)

clear()//删除所有元素

2.2.3.检查是否包含某元素

booleancontains(Objectobj)返回true,表示本对象包含obj,

2.2.4.返回根节点对象(最小的对象)

Objectfirst()

2.2.5.返回最后一个节点对象(最大的对象)

Objectlast()

2.2.6.检查集合是否为空

booleanisEmpty()返回true表示没有任何节点。

2.2.7.返回节点总数

intsize()

//实例化TreeSet对象,并使用匿名类方法.

TreeSetmyTree=newTreeSet(newComparator()

{

publicintcompare(Objecta,Objectb){

Studentstu1=(Student)a;

Studentstu2=(Student)b;

ReturnpareTo(stu2);

}

}

);//到此,对象声明结束。

Studentst1=newStudent(87,”扬花”);

MyTree.add(st1);

st1=newStudent(97,”扬花1”);

MyTree.add(st1);

st1=newStudent(32,”塘养”);

MyTree.add(st1);

//开始输出数据

Iteratorie=MyTree.iterator();//获得迭代器

While(ie.hasNext()){

Studentst3=(Student)ie.next();

System.out.println(st3.name+””+str3.mathScore);

}

说明:

1.把一个元素插入TreeSet对象的合适位置要比插入数组或链表的合适位置效

率高,

2.输出元素可以使用Iterator对象的方法。

3.如何检查一个10位的字符串是否由互不相同的字符组成。

4.如果要检查一个5位的整数是否由互不相同的数字组成,又该如何处理?

请用

两种不同的方法实现它。

(二)。

实现了List接口的类

1.Vector类

该类具有同步功能,是线程安全的,但速度慢一些,在需要同步的场合使用。

如果侧重于速度,则可以使用其它ArrayList类

1.1.构造函数

Vector()

Vector(intcapacity)

Vector(intcapacity,intincrement)

Vector(Collectionc)

1.2.方法:

1.2.1.添加/插入元素

add(Objectobj)增加一个对象

add(intindex,Objectobj)在index位置插入一个对象

addElement(Objectobj)增加一个对象

1.2.2.获得元素

ObjectfirstElement()返回第一个元素

ObjectlastElement()返回最后一个元素

Objectget(intindex)返回索引为index的元素

elementAt(intindex)返回索引为index的元素

1.2.3.获得元素个数

intsize()返回当前元素总数

1.2.4.删除元素

removeElementAt(intindex)删除索引为index的元素

remove(Objectobj)删除元素Obj

clear()删除所有元素。

1.2.5.获得枚举/迭代器

Enumerationelements()返回对象的枚举器

Iteratoriterator()返回迭代器对象

1.2.6.转换为其它对象

Object[]toArray();//返回Object数组

toArray(Object[]obj)将对象拷贝到数组obj中.此处obj必须分配存储空间

1.2.7.返回本对象的一个拷贝

Vectorclone();//返回本对象的一个拷贝

1.2.8.获得子序列

ListsubList(intfromIndex,inttoIndex)返回范围fromIndex--toIndex中的元素。

1.2.9.检查是否存在元素

IntindexOf(Objectobj)搜索对象obj,并返回obj在集合中的索引,如果没有找

到,则返回-1;

IntindexOf(Objectobj,intindex)从index位置开始搜索对象obj,并返回obj在

集合中的索引,如果没有找到,则返回-1;

booleancontains(Objectobj)返回true当包含对象obj时

练习:

写一个方法,输入一个整数,返回它的所有因子。

2.ArrayList类

该类没有同步功能,是线程非安全的,但速度快,适合于很少对元素进行删除的场合。

如果需要同步,则可以使用Vector类或采取其它同步措施.ArrayList在内存中是顺序连续存放的,适用于元素的随机存取。

如果有同步要求,可以有两种方法:

一是在操作集合对象的方法上使用synchronized关键字,另外一个就是,定义同步化的集合对象(采用Collections工具类的方法),例如:

ListmyList=Collections.synchronizedList(newArrayList());

2.1.构造函数

ArrayList() 

ArrayList(Collectionc) 

ArrayList(intcapacity) 

ArrayList() //泛型表示法。

ArrayList(Collectionc) 

ArrayList(intcapacity) 

2.2.方法:

2.2.1.添加/插入对象

add(int index,Object element) 在索引index插入元素element

add(Object o) 在末尾处添加一个元素

addAll(Collection c) 在末尾处添加一个集合对象

addAll(int index,Collection c) 在索引index插入集合对象

2.2.2.获得对象

 Objectget(int index) 返回索引index处的元素

2.2.3.检查是否存在元素

booleancontains(Object elem) 返回true表示包含元素elem

intindexOf(Object elem)正向查找元素elem,如果存在,则返回该元素在

集合中的索引否则,返回-1

intlastIndexOf(Object elem) 逆向查找元素elem,如果存在,则返回该元素在

集合中的索引否则,返回-1

 2.2.4.转换为其它类型

 Object[]toArray() 返回一个数组

2.2.5.检查是否为空(不包含任何对象)

booleanisEmpty() true表示对象为空

2.2.6.删除对象成员

remove(Objectobj)删除元素Obj

remove(intindex)删除索引为index的元素

clear()删除所有元素。

2.2.7.拷贝对象

ArrayListclone()

2.2.7.获得迭代器

Iteratoriterator()//获得迭代器

2.2.8.修改元素

set(intindex,Objectobj)修改位置index处的元素

2.2.9.获得元素个数

intsize()

2.2.10.获得子序列

ListsubList(intfromIndex,inttoIndex)返回范围fromIndex--toIndex中的元素。

2.2.11.确保容量

voidensureCapacity(intminCapacity)

2.2.12..缩小集合的容量到size大小

voidtrimToSize()

3。

LinkedList类(链表)

链表是一种常见的数据结构,采用链式存储,比数组更加灵活,但需要付出较多的存储空间。

链表是由若干个称为节点的对象组成的一种数据结构,每个节点含有一个数据域和一个指向下一个节点的指针。

链表类(LinkedList)封装在java.util包中。

适合于对元素频繁进行删除、插入等操作的场合。

3.1.构造函数

LinkedList()

LinkedList()

3.2.方法:

3.2.1.添加节点

booleanadd(Objectelement)//添加(节点)元素到链表中

booleanadd(intindex,Objectelement)//在链表index位置处添加(节点)元素.

booleanaddFirst(Objectelement)//添加(节点)元素到链表头部位置

booleanaddLast(Objectelement)//添加(节点)元素到链表尾部位置

3.2.2.删除节点

voidclear()删除所有节点

Objectremove(intindex)//删除位置index处的元素

booleanremove(Objectelement)//删除位置index处的元素

ObjectremoveFirst()//删除第一个元素

ObjectremoveLast()//删除最后一个元素

3.2.3.获得节点

ObjectgetFirst()//返回第一个元素

ObjectgetLast()//返回最后一个元素

Objectget(intindex)//获得位置index处的元素

3.2.4.查找节点

booleancontains(Objectelement)返回true表示包含元素element

intindexOf(Objectelement)//正向搜索element,并返回该元素在链表中的索引,

如果没有该元素,则返回-1

intlastIndexOf(Objectelement)//逆向搜索element,并返回该元素在链表中的索引,

如果没有该元素,则返回-1

3.2.5.修改节点

Objectset(intindex,Objectelement)//替换位置index的元素

3.2.6.获得节点总数

intsize()返回链表长度

3.2.7.复制链表

Objectclone()//获得本链表的一份拷贝

练习1:

用LinkedList实现Stack操作。

提供下列功能:

push(Objectobj)//元素入栈

Objectpop()//元素出栈

booleanisEmpty()//检查栈是否为空

Object[]toArray()//以数组形式返回栈中所有元素

练习2:

有一副扑克牌,现将牌最上面一张发出,将其下一张放最下面,又将最上面一张发出,将其下一张放最下面,以此类推,直至发完所有牌,问最后一张是什么牌?

(牌的顺序:

大王,小王,黑桃,红桃,梅花,方块,同种色顺序:

A,2,3,……,Q,K。

,依此类推。

试编程求解之。

4.栈(Stack)类

栈是一种实现了“后进先出“的数据结构,只能在一端进行输入或输出操作。

向栈中添加数据称为压栈,从栈中输出数据叫弹栈(出栈)。

压栈和出栈都在栈顶进行,即最后输入的数据在最前面。

栈是很灵活的数据结构,使用栈可以节省内存空间,比如,递归是一种很消耗内存的算法,但借助栈可以消除大部分递归.达到和递归算法相同的目的.

栈是Vector的一个子类,实现了后进先出的数据结构

4.1.构造函数:

Stack()

4.2.方法:

4.2.1.添加元素

Objectpush(Objectobj)//添加数据

4.2.2.获得元素

Objectpop()//弹出数据

Objectpeek()//查看栈顶数据

4.2.3.检查栈是否为空

booleanempty()返回true表示栈空(没有任何元素).

4.2.4.搜索元素

intsearch(Objectelemet)返回element在栈中的位置,栈顶位置为1,向下依次增加.如果栈中不存在元素element则返回-1.

5.ArrayList和LinkedList的特点及其使用场合

5.1.Arr

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2