java集合与泛型程序设计.docx
- 文档编号:23425648
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:15
- 大小:234.09KB
java集合与泛型程序设计.docx
《java集合与泛型程序设计.docx》由会员分享,可在线阅读,更多相关《java集合与泛型程序设计.docx(15页珍藏版)》请在冰豆网上搜索。
java集合与泛型程序设计
信息工程学院
Java程序设计实验/实习报告
学院:
理学院
班级:
计算101
姓名:
洪龙龙
学号:
2010014549
成绩:
A
一、
二、实验/实习过程
实验题目1:
源代码:
/**Person.java*/
packagelab6;
classPerson{
privateStringname;//姓名
privateStringidstr;//身份证号
publicPerson(Stringname,Stringidstr){
this.name=name;this.idstr=idstr;
}
publicStringtoString(){
return"姓名:
"+name+"身份证号:
"+idstr;
}
}
/**Student.java*/
packagelab6;
classStudentextendsPerson{
privateintchinese,maths,english;
Student(Stringname,Stringidstr,intchinese,intmaths,intenglish){
super(name,idstr);
this.chinese=chinese;this.maths=maths;this.english=english;
}
publicStringtoString(){
returnsuper.toString()+"语文:
"+chinese+"数学:
"+maths+"英文"+english;
}
}
/**Teacher.java*/
packagelab6;
classTeacherextendsPerson{
privateintwage;
Teacher(Stringname,Stringidstr,intwage){
super(name,idstr);
this.wage=wage;
}
publicStringtoString(){
returnsuper.toString()+"工资:
"+wage;
}
}
/**Exercise1.java*/
packagelab6;
importjava.util.*;
publicclassExercise1{
publicstaticvoidmain(String[]args){
LinkedList
System.out.println("打印链表信息");
mylist.add(newPerson("张三","12310000"));
mylist.add(newStudent("李四","12320000",89,93,94));
mylist.add(newTeacher("英明","12330000",40000));
Iterator
while(iter.hasNext())
print(iter.next());
System.out.println("=================================");
System.out.println("将个人信息增加至表头和表尾,打印链表信息:
");
Studentstu=newStudent("洪龙龙","2010014549",70,59,92);
mylist.addFirst(stu);
mylist.addLast(stu);
iter=mylist.iterator();
while(iter.hasNext())
print(iter.next());
mylist.removeFirst();
System.out.println("=================================");
System.out.println("将表头删除后,打印链表信息:
");
iter=mylist.iterator();
while(iter.hasNext())
print(iter.next());
mylist.removeLast();
System.out.println("=================================");
System.out.println("将表尾删除后,打印链表信息:
");
iter=mylist.iterator();
while(iter.hasNext())
print(iter.next());
mylist.removeAll(mylist);
System.out.println("=================================");
System.out.print("调用LinkedList的函数removeAll后:
");
if(mylist.isEmpty())
System.out.println("链表为空!
");
else
System.out.println("链表依然非空!
");
}
publicstaticvoidprint(Personp){
System.out.println(p.toString());
}
}
程序的运行结果:
实习题目2:
源代码:
/**Person.java*/
packagelab6.special;
publicclassPersonimplementsComparable{
privateintid;
privateStringname;
publicPerson(intid,Stringname){
this.id=id;this.name=name;
}
publicbooleanequals(Objectobj){
Personp=(Person)obj;
if(this==obj)
returntrue;
if(obj==null)
returnfalse;
if(getClass()!
=obj.getClass())
returnfalse;
Personother=(Person)obj;
if(name==null){
if(other.name!
=null)
returnfalse;
}elseif(!
name.equals(other.name))
returnfalse;
if(id!
=other.id)
returnfalse;
returntrue;
}
publicinthashCode(){
finalintprime=31;
intresult=1;
result=prime*result+((name==null)?
0:
name.hashCode());
result=prime*result+id;
returnresult;
}
publicintcompareTo(Objectobj){
Personp=(Person)obj;
returnid-p.id;
}
publicStringtoString(){
return"身份证号:
"+id+"姓名:
"+name;
}
}
/**Exercise2.java*/
packagelab6.special;
importjava.util.*;
publicclassExercise2{
publicstaticvoidmain(String[]args){
System.out.println("=====测试HashSet中是否可以存放重复元素=====");
Personp1=newPerson(12310000,"张三");
Personp2=newPerson(12320000,"李四");
Personp3=newPerson(12330000,"英明");
HashSet
hashset.add(p1);
hashset.add(p2);
hashset.add(p3);
Personp4=newPerson(12330000,"英明");
hashset.add(p4);
Iterator
while(iter.hasNext())
System.out.println(iter.next().toString());
System.out.println("=====对于treeset中的元素按照身份证号的升序打印=====");
TreeSet
treeset.add(p1);
treeset.add(p2);
treeset.add(p3);
iter=treeset.iterator();
while(iter.hasNext())
System.out.println(iter.next().toString());
}
}
程序的运行结果:
解释说明:
在文件Exercise2.java中,由于p1和p4虽为不同的对象,但对象的实体内容完全相同,在HashSet中是不会添加重复元素的.但是怎样才算是相同的元素,要根据我们的具体情况去重写hashCode()方法和equals()方法.对于排序问题,我们要使用Comaprable接口的compareTo()方法以达到排序目的.
实习题目3:
源代码:
/**Search.java*/
packagelab6;
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
importjava.util.*;
importjava.io.*;
publicclassSearchextendsJFrameimplementsActionListener{
JTextFieldidfield=newJTextField();
JTextFieldnamefield=newJTextField();
JMenuItemcheckinitem;
JMenuItemsearchitem;
JButtonbutton;
JLabelimagelabel=newJLabel();
HashMap
Search(Strings){
super(s);
ContainercontentPane=getContentPane();
contentPane.setLayout(newBorderLayout());
JMenuBarbar=newJMenuBar();
JMenumenu=newJMenu("请选择");
bar.add(menu);//将菜单添加至菜单条上
checkinitem=newJMenuItem("录入");
searchitem=newJMenuItem("查询");
checkinitem.addActionListener(this);//添加事件监听
searchitem.addActionListener(this);//添加事件监听
menu.add(checkinitem);//将菜单选项添加至菜单上
menu.add(searchitem);
contentPane.add(bar,BorderLayout.NORTH);//将菜单条添至窗体北部
JPanelpanel=newJPanel(newGridLayout(1,2));//1行2列布局
contentPane.add(panel,BorderLayout.CENTER);//将面板添至窗体中部
button=newJButton("完成操作");
button.setSize(20,80);
button.addActionListener(this);
JPanelsouthpanel=newJPanel();
southpanel.add(button);
JPanelwestpanel=newJPanel();
westpanel.setSize(120,380);
ImageIconimg=newImageIcon("images/pic.gif");
imagelabel.setIcon(img);
contentPane.add(imagelabel,BorderLayout.WEST);
contentPane.add(southpanel,BorderLayout.SOUTH);
JPanelpanelLeft=newJPanel(newGridLayout(5,2,10,10));
JPanelpanelRight=newJPanel(newGridLayout(5,1,15,15));
panel.add(panelLeft);
panel.add(panelRight);//将左右面板分别添加至面板
JPanelblankpanel=newJPanel();//空面板
blankpanel.setSize(20,100);
JLabelidlabel=newJLabel("学号:
",JLabel.RIGHT);
JLabelnamelabel=newJLabel("姓名:
",JLabel.RIGHT);
for(inti=1;i<=10;i++){
if(i==4)
panelLeft.add(idlabel);
if(i==8)
panelLeft.add(namelabel);
panelLeft.add(blankpanel);
}
blankpanel.setSize(20,150);
for(inti=1;i<=5;i++){
if(i==2)
panelRight.add(idfield);
if(i==4)
panelRight.add(namefield);
panelRight.add(blankpanel);
}
setSize(400,300);
setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==checkinitem){
try{//追加方式记录学生的成绩
namefield.setEditable(true);
Filefile=newFile("name.txt");
FileOutputStreamfos=newFileOutputStream(file,true);
Stringgetidfield=idfield.getText();
Stringgetnamefield=namefield.getText();
hashmap.put(getidfield,getnamefield);
byte[]b;
Stringstr=getidfield+""+getnamefield+"";
b=str.getBytes();
fos.write(b,0,b.length);
fos.close();
}catch(IOExceptionee){
ee.printStackTrace();
}
}
if(e.getSource()==searchitem){
namefield.setEditable(false);
try{
Stringstrdst,strsrc;
strsrc=idfield.getText();
if(hashmap.containsKey(strsrc)){
strdst=hashmap.get(strsrc);
System.out.println(strsrc);
namefield.setText(strdst);
//添加10个同学的照片信息
ImageIconimg;
if(strsrc.equals("2010014534")){
img=newImageIcon("images/liuzhenhui.jpg");
imagelabel.setIcon(img);
}
elseif(strsrc.equals("2010014536")){
img=newImageIcon("images/mawenlong.jpg");
imagelabel.setIcon(img);
}
elseif(strsrc.equals("2010014540")){
img=newImageIcon("images/guosongtao.jpg");
imagelabel.setIcon(img);
}
elseif(strsrc.equals("2010014542")){
img=newImageIcon("images/wudan.jpg");
imagelabel.setIcon(img);
}
elseif(strsrc.equals("2010014545")){
img=newImageIcon("images/chenfangfang.jpg");
imagelabel.setIcon(img);
}
elseif(strsrc.equals("2010014549")){
img=newImageIcon("images/honglonglong.jpg");
imagelabel.setIcon(img);
}
elseif(strsrc.equals("2010014550")){
img=newImageIcon("images/yuanminghao.jpg");
imagelabel.setIcon(img);
}
elseif(strsrc.equals("2010014553")){
img=newImageIcon("images/wanghaoyu.jpg");
imagelabel.setIcon(img);
}
elseif(strsrc.equals("2010014561")){
img=newImageIcon("images/lichang.jpg");
imagelabel.setIcon(img);
}
elseif(strsrc.equals("2010014563")){
img=newImageIcon("images/yanyazhen.jpg");
imagelabel.setIcon(img);
}
}
else{
namefield.setText("该班级无此人数据");
imagelabel.setIcon(newImageIcon("images/invalid.jpg"));
}
}catch(Exceptionee){
ee.printStackTrace();
}
}
if(e.getSource()==button){
idfield.setText("");
namefield.setText("");
namefield.setEditable(true);
}
}
}
/**Exercise3.java*/
packagelab6;
publicclassExercise3{
publicstaticvoidmain(String[]args){
Searchw=newSearch("班级人员查询工具");
}
}
程序的运行结果:
点击“
”后如图所示:
然后分别在学号和姓名里面填入相关内容,并依此点击“请选择”菜单,并点击“录入”菜单项,这样重复10次即可将10组数据写进name.txt文件里.
比如存入name.txt文件的数据如下:
如果查找name.txt里面存在的数据,点击“查询”程序运行结果如下:
如果查找name.txt里面不存在的数据,点击“查询”程序的运行结果如下:
三、实验/实习总结
通过本次的实习,我发现了一些基本的问题:
使用散列结构对元素无论是进行存取还是增删,其效率要高于数组和链表结构.一般的结构可以存放重复的元素,而实现了Set接口的一些类是不可以存放重复元素.对于每一个具体的问题,如何才算相同的元素,我们必须重写hashCode方法和equals()来具体规定.对于排序问题,排序对象所属类必须对Comparable接口进行重写.还有在本次实习过程中出现的问题,在判断两个字符串相等时候,不应该使用“==”去判断是否相等,而应该使用字符串类提供的equals()方法去判断,这也是本次实验调试过程中遇到的最大最隐蔽的障碍.
Nicework!
2013-05-07
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 集合 程序设计
![提示](https://static.bdocx.com/images/bang_tan.gif)