集合.docx
- 文档编号:10041716
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:11
- 大小:17.91KB
集合.docx
《集合.docx》由会员分享,可在线阅读,更多相关《集合.docx(11页珍藏版)》请在冰豆网上搜索。
集合
Java语言的集合
一、集合基本内容介绍
1.概念
集合可理解为一个容器,该容器主要指映射、集合、列表、数组和散列表等抽象数据结构。
容器包含有多个元素,这些元素通常是一些Java对象。
集合框架是针对上述抽象数据结构所定义的一些标准编程接口,主要是由一组精心设计的接口、类和隐含在其中的算法所组成,通过它们可以采用集合的方式完成对Java对象的存储、获取、操作以及转换等功能。
2.Arrays类
Arrays(数组)类是集合框架的一个成员类,其提供的功能主要对数组对象进行排序、搜索和填充操作。
Arrays类所提供的方法都是静态方法,可以直接通过类名加以引用。
Arrays类可以对Object,byte,short,int,long,float,double,char等类型的数组完成上述操作。
3.基本的集合接口
基本的集合接口是指Collection接口、List接口、Set接口和Map接口。
4.集合
集合(Set)是指一个不包含重复元素的对象集合,是数学上“集合”概念的一种抽象。
基于这样的概念,集合接口所定义的方法主要分为两类,一是集合和元素之间的方法;二是集合之间的方法。
HashSet类所创建的是一个无序的集合对象。
当需要从集合中有序地获取元素时,需TreeSet类来建立集合对象,需注意的是添加到TreeSet中的元素必须是可排序的。
5.列表
列表(List)是指一个有序的对象集合,也称为一个对象序列。
通过列表接口,可以利用整数索引(即元素在列表中的位置)对列表中的每个元素有准确的控制,包括访问特定位置的元素对象和查询特定的元素。
ArrayList类是通过数组方式来实现的,LinkedList类是通过链表结构来实现。
由于这两个类的实现方式不同,使得相关操作方法的代价也不相同。
一般说来,若对一个列表结构的开始和结束处有频繁地添加和删除操作时,较为理想的是选用LinkedList类所实例化的对象表示该列表,通常LinkedList对象表示堆栈或队列。
6.映射
映射(Map)接口是与Collection接口相并列的一个接口,该接口描述了不重复的键到值的映射。
一个映射对象中不能包含重复的键,且每个键只能映射到一个值。
HashMap类和TreeMap类是集合框架提供的Map接口的实现类。
在Map中插入、删除和定位元素,HashMap是最好的选择。
但如果需要按顺序遍历键,那么需选择TreeMap。
7.Collection类
Collection类提供了一些静态方法,通过这些静态方法可以对集合对象进行操作或返回集合对象。
8.枚举和迭代
枚举和迭代的功能是将一个集合对象中所有元素顺序列举出来,它们分别是由Enumeration接口和Iterator接口所定义。
两者之间既有相同之处,也存在不同。
目前Java语言编程中推荐用Iterator接口代替Enumeration接口。
9.历史集合类
历史集合类所指是在Java标准版1.2之间所定义的上些对集合进行操作的类定义,它们是Vector类、Dictionary类和Hashtable类。
二、程序举例
例1.Arrays类的排序实例
importjava.util.Arrays;
publicclassArraysDemo{
publicstaticvoidmain(String[]args){
String[]strings={"wall","parent","mother","grand","rain","sorry"};
Arrays.sort(strings);
for(inti=0;i System.out.println(strings[i]); } } 程序运行结果: grand mother parent rain sorry wall 程序分析: Arrays类的sort()方法是静态方法,可直接通过类名加以引用。 sort()方法默认升序排列。 请查API文档了解Arrays类及sort()方法。 例2.Vector类的简单应用 importjava.util.*; publicclassVectorDemo{ publicstaticvoidmain(String[]args){ Vector v.add("苹果"); v.add(0,"香蕉"); v.add("芒果"); v.add("梨子"); v.add(1,"葡萄"); System.out.println(v); Stringname=(String)v.get(3); System.out.println(name); } } 程序执行结果: [香蕉,葡萄,苹果,芒果,梨子] 芒果 程序分析: Vector对象的创建、对象添加、对象获取和结果打印是该程序学习的重点。 例8.3利用Collection类给集合对象排序。 importjava.util.Vector; importjava.util.Collections; publicclassCollectionsDemo{ publicstaticvoidmain(String[]args){ Vector v.add("wall"); v.add("parent"); v.add("mother"); v.add("grand"); v.add("rain"); v.add("sorry"); Collections.sort(v);//Collections类的sort()方法是静态方法,可直接通过类名加以引用。 //sort()方法的默认排序规则是按字母顺序。 for(inti=0;i System.out.println(v.elementAt(i)); } } 程序运行结果: grand mother parent rain sorry wall 例8.4利用Collection类给集合对象排序。 importjava.util.Comparator; importjava.util.Arrays; publicclassCompareDemo{ /** *@paramargs */ publicstaticvoidmain(String[]args){ String[]strings={"wall","parent","mother","grand","rain","sorry"}; Arrays.sort(strings); print(strings,"默认排序"); System.out.println(); //Arrays类的sort()方法可根据所定义比较器的不同,有不同的排序结果。 Arrays.sort(strings,newConvertComparator()); print(strings,"反向排序"); } staticvoidprint(String[]args,Stringtitle){ System.out.println(title); for(inti=0;i System.out.println(args[i]); }} //比较器实现了Comparator接口,定义了compare()方法。 classConvertComparatorimplementsComparator publicintcompare(Objectb1,Objectb2) { Strings1=(String)b1; Strings2=(String)b2; returnpareTo(s1); } } 程序运行结果: 默认排序 grand mother parent rain sorry wall 反向排序 wall sorry rain parent mother grand 例8.5将ArrayList对象转换为一个数组对象 importjava.util.*; publicclassToArray{ publicstaticvoidmain(String[]args){ ArrayList a1.add("wall"); a1.add("parent"); a1.add("mother"); a1.add("grand"); a1.add("rain"); a1.add("sorry"); //ArrayList对象的toArray()方法可将其所包含的元素转换到一个数组中。 Object[]b1=a1.toArray(); System.out.println("ArrayofObjecthaslength"+b1.length); //ArrayList对象被转换为一个字符数组,用到了强制类型转换。 String[]s1=(String[])a1.toArray(newString[0]); System.out.println("ArrayofStringhaslength"+s1.length); for(inti=0;i System.out.println(s1[i]); } } 程序运行结果: ArrayofObjecthaslength6 ArrayofStringhaslength6 wall parent mother grand rain sorry 例8.6利用HashMap保存复合对象 importjava.io.*; importjava.util.*; publicclassStudent{ privateStringid; privateStringname; privateintphoneNumber; Student(StringaId,StringaName,intphone) { id=aId; name=aName; phoneNumber=phone; } publicStringtoString(){ return(id+": "+name+": "+phoneNumber); } publicstaticStringreadString(Strings)throwsIOException{ System.out.println(s); BufferedReaderbuf=newBufferedReader(newInputStreamReader(System.in)); //对标准输入流进行包装获得了缓冲输入流对象,目的是使用其readLine()方法,读取一行输入内容。 returnbuf.readLine(); } publicstaticintreadInt(Strings)throwsIOException,NumberFormatException{ System.out.println(s); BufferedReaderbuf=newBufferedReader(newInputStreamReader(System.in)); Stringline=buf.readLine(); returnInteger.parseInt(line); } publicstaticvoidmain(String[]args){ Map //HashMap中所保存的是以学生的学号为键、学生对象为值而构成的映射结构。 Studentbill=newStudent("001","张晓",2345656); students.put(bill.id,bill); try{ intnumOfstudents=readInt("Howmanystudents? "); Studentstd; for(inti=0;i std=newStudent(readString("EnterstudentID: "),readString("EnterstudentName: "),readInt("Enterphonenumber: ")); students.put(std.id,std); } System.out.println("Studentsstoredinmapobject"); System.out.println(students); System.out.println("\nSearchastudent"); System.out.println(students.get(readString("Enterastudentid"))); }catch(IOExceptione){ System.out.println("inputerror"); System.out.println(e.getMessage()); }catch(NumberFormatExceptione1){ System.out.println("inputerror"); System.out.println(e1.getMessage()); } } } 程序执行结果: Howmanystudents? 2 EnterstudentID: 001 EnterstudentName: 李明 Enterphonenumber: 123456 EnterstudentID: 002 EnterstudentName: 张三 Enterphonenumber: 234567 Studentsstoredinmapobject {001=001: 李明: 123456,002=002: 张三: 234567} Searchastudent Enterastudentid 001 001: 李明: 123456
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 集合