14java集合问题.docx
- 文档编号:29457714
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:30
- 大小:24.06KB
14java集合问题.docx
《14java集合问题.docx》由会员分享,可在线阅读,更多相关《14java集合问题.docx(30页珍藏版)》请在冰豆网上搜索。
14java集合问题
1-4集合问题目录
1.1set
1.2Vector
1.3list
1.4table
1.5hash
1.6枚举
1.7map
1集合问题
1.1set
1、编写男生集合和80分以上学生集合。
进行并、交、差运算和判断包含关系并显示输出。
importjava.util.*;
classStudent
{
Stringname;
charsex;
intscore;
publicStudent(Stringname,charsex,intscore)
{
this.name=name;
this.sex=sex;
this.score=score;
}
publicvoidprintStudent()
{
System.out.println("姓名"+name+"性别"+sex+"分数"+score);
}
}
classSetTest2
{
publicstaticvoidmain(String[]args)
{
Student[]s=newStudent[10];
s[0]=newStudent("a",'f',90);s[1]=newStudent("b",'m',67);
s[2]=newStudent("b",'m',70);s[3]=newStudent("c",'f',90);
s[4]=newStudent("d",'f',90);s[5]=newStudent("e",'m',78);
s[6]=newStudent("f",'m',79);s[7]=newStudent("g",'f',90);
s[8]=newStudent("h",'m',90);s[9]=newStudent("i",'m',87);
HashSetboy=newHashSet();
HashSeteighty=newHashSet();
for(inti=0;i { if(s[i].sex=='m') { boy.add(s[i]); } if(s[i].score>=80) { eighty.add(s[i]); } } System.out.println("进行并运算"); HashSetunion=newHashSet(); union.addAll(boy); union.addAll(eighty); for(Iterator { (i.next()).printStudent(); } System.out.println("进行差运算"); HashSetminusBoy=newHashSet(); minusBoy.addAll(boy); minusBoy.removeAll(eighty); System.out.println("男生集合减80分集合"); for(Iterator { (i.next()).printStudent(); } HashSetminusEighty=newHashSet(); minusEighty.addAll(eighty); minusEighty.removeAll(boy); System.out.println("80分集合减男生集合"); for(Iterator { (i.next()).printStudent(); } System.out.println("进行交运算"); HashSetjoin=newHashSet(); join.addAll(union); join.removeAll(minusBoy); join.removeAll(minusEighty); for(Iterator { (i.next()).printStudent(); } } } 2、借助字符串标记验证集合中不能存放已有的元素。 importjava.util.*; classStringTokenSet { publicstaticvoidmain(String[]args) { Strings="thisisisisapear"; StringTokenizerst=newStringTokenizer(s); HashSet while(st.hasMoreTokens()) { hs.add(st.nextToken()); } for(Iterator { System.out.println(i.next()); } } } 3、使用TreeSet排序 TreeSet类是实现Set接口的类,它的大部分方法都是接口方法的实现。 TreeSet类创建的对象称为树集。 树集由若干节点组成树型的数据结构,节点具有层次性,当使用TreeSet()构造方法创建树集后,可以设计add方法增加节点,同一层中的节点从左到右按字从小到大递增,下一层的都比上一层的小。 接口中存放的对象必须是实现java.lang包中Comparable接口的类的实例。 需要能比较实例的大小。 本程序要求能通过二个文本框输入学生的姓名和分数(或通过人机交互语句实现),要求程序能按成绩排序,可以将所有的学生的姓名与分数显示在一个文本区中。 Student.java publicclassStudentimplementsComparable {Stringname; intscore; Student(Stringname,intscore) {this.name=name; this.score=score; } publicintcompareTo(Objectb) {Studentst=(Student)b; intm=this.score-st.score; if(m! =0) returnm; else return1; } publicintgetScore() {returnscore; } publicStringgetName() {returnname; } } StudentFrame.java importjava.awt.*; importjava.awt.event.*; importjava.util.*; publicclassStudentFrameextendsFrameimplementsActionListener {TextAreashowArea; TextFieldinputName,inputScore; Buttonbutton; TreeSettreeSet; StudentFrame() {treeSet=【代码1】//使用无参数构造方法创建treeSet showArea=newTextArea(); showArea.setFont(newFont("",Font.BOLD,20)); inputName=newTextField(5); inputScore=newTextField(5); button=newButton("确定"); button.addActionListener(this); PanelpNorth=newPanel(); pNorth.add(newLabel("Name: ")); pNorth.add(inputName); pNorth.add(newLabel("Score: ")); pNorth.add(inputScore); pNorth.add(button); add(pNorth,BorderLayout.NORTH); add(showArea,BorderLayout.CENTER); setSize(300,320); setVisible(true); addWindowListener(newWindowAdapter() {publicvoidwindowClosing(WindowEvente) {System.exit(0); } }); validate(); } publicvoidactionPerformed(ActionEvente) {Stringname=inputName.getText(); intscore=0; try{score=Integer.parseInt(inputScore.getText().trim()); if(name.length()>0) {Studentstu=newStudent(name,score); 【代码2】//treeSet添加stu show(treeSet); } } catch(NumberFormatExceptionexp) {inputScore.setText("请输入数字字符"); } } publicvoidshow(TreeSettree) {showArea.setText(null); Iteratorte=【代码3】//treeSet返回迭代器 while(【代码4】)//te判断是否有下一个元素 {Studentstu=【代码5】//te返回其中的下一个元素 showArea.append("Name: "+stu.getName()+"Score: "+stu.getScore()+"\n"); } } } TreeSetMainClass.java publicclassTreeSetMainClass {publicstaticvoidmain(Stringargs[]) {newStudentFrame(); } } 【代码1】: newTreeSet(); 【代码2】: treeSet.add(stu); 【代码3】: tree.iterator(); 【代码4】: te.hasNext() 【代码5】: (Student)te.next(); 4、集合: 关于集合的操作、抽象数据类型、贪婪算法、分治算法、回溯算法、集合转换、串行化、迭代、集合视图 集合表示了一组对象(称为元素),在这个对象中存放指向其他对象的引用。 Collection接口是集合接口树的根,它的子接口有: Set其中不能包含重复的元素,是数学中集合概念的抽象。 List是一个有序的集合,称为列表或序列。 Map实现从键值到值的映射。 SortedSetSortedMap分别是具有排序性能否认Set和Map。 1)将命令行中的每个字符串加入到集合s中,其中重复的字符串将不能加入 importjava.util.*; publicclassFindDups{ publicstaticvoidmain(Stringargs[]){ Sets=newHashSet();//创建一个HashSet对象,缺省的初始容量是16。 for(inti=0;i //将命令行中的每个字符串加入到集合s中,其中重复的字符串将不能加入,并被打印输出。 if(! s.add(args[i])) System.out.println("Duplicatedetected: "+args[i]); } System.out.println(s.size()+"distinctwordsdetected: "+s);//输出集合s的元素个数以及集合中的所有元素。 } } 1.2vector 1、创建学生向量并进行查找操作。 importjava.util.*; classStudent { publicStringname; charsex; intscore; publicStudent(Stringname,charsex,intscore) { this.name=name; this.sex=sex; this.score=score; } publicvoidprintStudent() { System.out.println("姓名"+name+"性别"+sex+"分数"+score); } } classVectorTest { publicstaticvoidsearch(Vectorc,intn) { intk=n-1; Studentm=(Student)c.get(k); m.printStudent(); } publicstaticvoidmain(String[]args) { Vector vs.add(newStudent("a",'f',90)); vs.add(newStudent("b",'f',80)); vs.add(newStudent("c",'c',90)); search(vs,1); } } 2、创建学生集合,用迭代器方法,删除一个元素、添加一个元素。 importjava.util.*; classVectorMethodTest { publicstaticvoidmain(String[]args) { Vector for(inti=0;i<10;i++) { v.add(newInteger(i)); } for(Iterator { if(it.next()==5) { it.remove(); } } for(Iteratorit=v.iterator();it.hasNext();) { System.out.println(it.next().toString()); } } } 3、请实现枚举接口,使用串行输入流将3个文件输入流串联在一起显示输出。 importjava.io.*; importjava.util.*; classSequenceInputStreamTest { publicstaticvoidmain(String[]args)throwsIOException { FileInputStreams1=newFileInputStream("F: \\char.txt"); FileInputStreams2=newFileInputStream("F: \\file.txt"); FileInputStreams3=newFileInputStream("F: \\byte.txt"); Vectorv=newVector(); v.add(s1); v.add(s2); v.add(s3); SequenceInputStreams=newSequenceInputStream(v.elements()); intc; while((c=s.read())! =-1) { System.out.print((char)c); } s.close(); s1.close(); s2.close(); s3.close(); } } char.txt: Hello file.txt: everyone byte.txt: andyou! 4、随机读写: 统计英文单词字 使用RandomAccessFile流统计一篇英文中的单词,要求统计: 1、共多少单词。 2、有多少互不相同的单词。 3、给出每个单词出现的频率。 按频率大小显示在TextArea中。 说明: RandomAccessFile中有一个方法: seek(longa),用来移动RandomAccessFile流的读写位置,其中a确定读写位置距离文件开头的字节位置。 另外,流还可以调用getFilePointer()方法获取当前流在文件中的读写位置。 Java.util包中的Vector类负责创建一个向量,创建一个向量不需要像数组那样必须给出数组的大小,向量创建后,例如: Vectora=newVector();a可以使用add(Objecto)把任何对象添加到该向量的末尾,向量的大小会自动增加。 a也可以使用add(intindex,Objecto)把一个对象添加到该向量的指定位置。 a还可以使用elementAt(intindex)获取指定元素、使用size()方法获取元素个数。 因此向量比数组使用更方便。 WordStatistic.java importjava.io.*; importjava.util.Vector; publicclassWordStatistic {VectorallWorsd,noSameWord; WordStatistic() {allWorsd=newVector(); noSameWord=newVector(); } publicvoidwordStatistic(Filefile) {try{RandomAccessFileinOne=【代码1】//创建指向文件file的inOne的对象 RandomAccessFileinTwo=【代码2】//创建指向文件file的inTwo的对象 longwordStarPostion=0,wordEndPostion=0; longlength=inOne.length(); intflag=1; intc=-1; for(intk=0;k<=length;k++) {c=【代码3】//inOne调用read()方法 booleanboo=(c<='Z'&&c>='A')||(c<='z'&&c>='a'); if(boo) {if(flag==1) {wordStarPostion=inOne.getFilePointer()-1; flag=0; } } else {if(flag==0) { if(c==-1) wordEndPostion=inOne.getFilePointer(); else wordEndPostion=inOne.getFilePointer()-1; 【代码4】//inTwo调用seek方法将读写位置移动到wordStarPostion bytecc[]=newbyte[(int)wordEndPostion-(int)wordStarPostion]; 【代码5】//inTwo调用readFully(bytea)方法,向a传递cc Stringword=newString(cc); allWorsd.add(word); if(! (noSameWord.contains(word))) noSameWord.add(word); } flag=1; } } inOne.close(); inTwo.close(); } catch(Exceptione){} } publicVectorgetAllWorsd() {returnallWorsd; } publicVectorgetNoSameWord() {returnnoSameWord; } } RandomExample.java importjava.awt.*; importjava.awt.event.*; importjava.util.Vector; importjava.io.File; publicclassStatisticFrameextendsFrameimplementsActionListener {WordStatisticstatistic; TextAreashowMessage; ButtonopenFile; FileDialogopenFileDialog; VectorallWord,noSameWord; publicStatisticFrame() {statistic=newWordStatistic(); showMessage=newTextArea(); openFile=newButton("OpenFile"); openFile.addActionListener(this); add(openFile,BorderLayout.NORTH); add(showMessage,BorderLayout.CENTER); openFileDialog=newFileDialog(this,"打开文件话框",FileDialog.LOAD); allWord=newVector(); noSameWord=newVector(); setSize(350,300); setVisible(true); addWindowListener(newWindowAdapter() {publicvoidwindowClosing(WindowEvente) {System.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 14 java 集合 问题