ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:33.34KB ,
资源ID:16058344      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-16058344.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(1207集合框架习题与实践.docx)为本站会员(b****7)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

1207集合框架习题与实践.docx

1、1207集合框架习题与实践1、Collection框架中实现比较要实现什么接口comparable/comparator2、ArrayList和Vector的区别答:这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,并且其中的数据是允许重复的,这是HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素(本来题目问的与hashset没有任何关系,但为了说清楚ArrayList与Vector

2、的功能,我们使用对比方式,更有利于说明问题)。接着才说ArrayList与Vector的区别,这主要包括两个方面:. (1)同步性: Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。备注:对于Vector&ArrayList、Hashtable&HashMap,要记住线程安全的问题,记住Vector与Hashtable是

3、旧的,是java一诞生就提供了的,它们是线程安全的,ArrayList与HashMap是java2时才提供的,它们是线程不安全的。所以,我们讲课时先讲老的。(2)数据增长: ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)。ArrayL

4、ist与Vector都可以设置初始的空间大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。 总结:即Vector增长原来的一倍,ArrayList增加原来的0.5倍。3、HashMap和Hashtable的区别(条理上还需要整理,也是先说相同点,再说不同点)HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。 HashMap允许将null作为一个entry的key或者value,而

5、Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能

6、不会有很大的差异。就HashMap与HashTable主要从三方面来说。 一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 三.值:只有HashMap可以让你将空值作为一个表的条目的key或value 4、List 和 Map 区别?一个是存储单列数据的集合,另一个是存储键和值这样的双列数据的集合,List中存储的数据是有顺序,并且允许重复;Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复

7、的。5、List, Set, Map是否继承自Collection接口? List,Set是,Map不是 6、List、Map、Set三个接口,存取元素时,各有什么特点? 首先,List与Set具有相似性,它们都是单列元素的集合,所以,它们有一个功共同的父接口,叫Collection。Set里面不允许有重复的元素,所谓重复,即不能有两个相等(注意,不是仅仅是相同)的对象 ,即假设Set集合中有了一个A对象,现在我要向Set集合再存入一个B对象,但B对象与A对象equals相等,则B对象存储不进去,所以,Set集合的add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成

8、功加入该元素时,则返回true,当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。Set取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。 List表示有先后顺序的集合, 注意,不是那种按年龄、按大小、按价格之类的排序。当我们多次调用add(Obj e)方法时,每次加入的对象就像火车站买票有排队顺序一样,按先来后到的顺序排序。有时候,也可以插队,即调用add(int index,Obj e)方法,就可以指定当前对象在集合中的存放位置。一个对象可以被反复存储进List中,每调用一次add方法,这个对象就被插入进

9、集合中一次,其实,并不是把这个对象本身存储进了集合中,而是在集合中用一个索引变量指向这个对象,当这个对象被add多次时,即相当于集合中有多个索引指向了这个对象,如图x所示。List除了可以以Iterator接口取得所有的元素,再逐一遍历各个元素之外,还可以调用get(index i)来明确说明取第几个。 Map与List和Set不同,它是双列的集合,其中有put方法,定义如下:put(obj key,obj value),每次存储时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等。取则可以根据key获得相应的value,即get(Object ke

10、y)返回值为key 所对应的value。另外,也可以获得所有的key的结合,还可以获得所有的value的结合,还可以获得key和value组合成的Map.Entry对象的集合。List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。HashSet按照hashcode值的某种运算方式进行存储,而不是直接按hashCode值的大小进行存储。例如,abc - 78,def - 62,xyz - 65在hashSet中的存储顺序不是62,65,78,这些问题感谢以前一个叫崔健的学员提出,最后通过查看源代码给他解释清楚,看本次

11、培训学员当中有多少能看懂源码。LinkedHashSet按插入的顺序存储,那被存储对象的hashcode方法还有什么作用呢?学员想想!hashset集合比较两个对象是否相等,首先看hashcode方法是否相等,然后看equals方法是否相等。new 两个Student插入到HashSet中,看HashSet的size,实现hashcode和equals方法后再看size。同一个对象可以在Vector中加入多次。往集合里面加元素,相当于集合里用一根绳子连接到了目标对象。往HashSet中却加不了多次的。 7、说出ArrayList,Vector, LinkedList的存储性能和特性 Array

12、List和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。8、Collection 和 Col

13、lections的区别。 Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 9、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用=还是equals()? 它们有何区别? Set里的元素是不能重复的,元素重复与否是使用equals()方法进行判断的。 equals()和=方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。练习1-扫雷小游戏,效果如下图:1答案:【代码1】

14、: new LinkedList();【代码2】: list.add(blockij) ; 【代码3】: list.size(); 【代码4】: (Block)list.get(randomIndex);【代码5】: list.remove(randomIndex); 2模板代码 Block.javapublic class Block String name; int number; boolean boo=false; public void setName(String name) this.name=name; public void setNumber(int n) number=n

15、; public int getNumber() return number; public String getName() return name; boolean isMine() return boo; public void setIsMine(boolean boo) this.boo=boo; LayMines.javaimport java.util.LinkedList;public class LayMines public void layMinesForBlock(Block block,int mineCount) int row=block.length; int

16、column=block0.length; LinkedList list=【代码1】 /创建空链表list for(int i=0;irow;i+) for(int j=0;j0) int size=【代码3】 / list返回节点的个数 int randomIndex=(int)(Math.random()*size); Block b=【代码4】 / list返回索引为randomIndex的节点中的数据 b.setName(雷); b.setIsMine(true); 【代码5】 /list删除索引值为randomIndex的节点 mineCount-; for(int i=0;iro

17、w;i+) for(int j=0;jcolumn;j+) if(blockij.isMine() else int mineNumber=0; for(int k=Math.max(i-1,0);k=Math.min(i+1,row-1);k+) for(int t=Math.max(j-1,0);t=Math.min(j+1,column-1);t+) if(blockkt.isMine() mineNumber+; blockij.setName(+mineNumber); blockij.setNumber(mineNumber); BlockView.javaimport java.

18、awt.*;public class BlockView extends Panel Label blockName; Button blockCover; CardLayout card; BlockView() card=new CardLayout(); setLayout(card); blockName=new Label(); blockCover=new Button(); add(cover,blockCover); add(name,blockName); public void setName(String name) blockName.setText(name); pu

19、blic String getName() return blockName.getText(); public void seeBlockName() card.show(this,name); validate(); public void seeBlockCover() card.show(this,cover); validate(); public Button getBlockCover() return blockCover; MineFrame.javaimport java.awt.*;import java.awt.event.*;public class MineFram

20、e extends Frame implements ActionListener Button reStart; Block block; BlockView blockView; LayMines lay; int row=10,colum=12,mineCount=22; int colorSwitch=0; Panel pCenter,pNorth; public MineFrame() reStart=new Button(重新开始); pCenter=new Panel(); pNorth=new Panel(); pNorth.setBackground(Color.cyan);

21、 block=new Blockrowcolum; for(int i=0;irow;i+) for(int j=0;jcolum;j+) blockij=new Block(); lay=new LayMines(); lay.layMinesForBlock(block,mineCount); blockView=new BlockViewrowcolum; pCenter.setLayout(new GridLayout(row,colum); for(int i=0;irow;i+) for(int j=0;jcolum;j+) blockViewij=new BlockView();

22、 blockViewij.setName(blockij.getName(); pCenter.add(blockViewij); blockViewij.getBlockCover().addActionListener(this); reStart.addActionListener(this); pNorth.add(reStart); add(pNorth,BorderLayout.NORTH); add(pCenter,BorderLayout.CENTER); setSize(200,232); setVisible(true); addWindowListener(new Win

23、dowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); validate(); public void actionPerformed(ActionEvent e) Button source=(Button)e.getSource(); if(source!=reStart) int m=-1,n=-1; for(int i=0;irow;i+) for(int j=0;jcolum;j+) if(source=blockViewij.getBlockCover() m=i; n=j; break; i

24、f(blockmn.isMine() for(int i=0;irow;i+) for(int j=0;j0) blockViewmn.seeBlockName(); else if(blockmn.getNumber()=0) for(int k=Math.max(m-1,0);k=Math.min(m+1,row-1);k+) for(int t=Math.max(n-1,0);t=Math.min(n+1,colum-1);t+) blockViewkt.seeBlockName(); if(source=reStart) for(int i=0;irow;i+) for(int j=0

25、;jcolum;j+) blockij.setIsMine(false); lay.layMinesForBlock(block,mineCount); for(int i=0;irow;i+) for(int j=0;jcolum;j+) blockViewij.setName(blockij.getName(); blockViewij.seeBlockCover(); blockViewij.getBlockCover().addActionListener(this); MineExample.javapublic class LayMineMainClass public stati

26、c void main(String args) new MineFrame(); 练习2- 使用TreeSet排序,效果如下:1答案:【代码1】: new TreeSet();【代码2】: treeSet.add(stu); 【代码3】: tree.iterator(); 【代码4】: te.hasNext()【代码5】: (Student)te.next(); 2模板代码 Student.javapublic class Student implements Comparable String name; int score; Student(String name,int score)

27、this.name=name; this.score=score; public int compareTo(Object b) Student st=(Student)b; int m=this.score-st.score; if(m!=0) return m; else return 1; public int getScore() return score; public String getName() return name; StudentFrame.javaimport java.awt.*;import java.awt.event.*;import java.util.*;

28、public class StudentFrame extends Frame implements ActionListener TextArea showArea; TextField inputName,inputScore; Button button; TreeSet treeSet; StudentFrame() treeSet=【代码1】 /使用无参数构造方法创建treeSet showArea=new TextArea(); showArea.setFont(new Font(,Font.BOLD,20); inputName=new TextField(5); inputSc

29、ore=new TextField(5); button=new Button(确定); button.addActionListener(this); Panel pNorth=new Panel(); pNorth.add(new Label(Name:); pNorth.add(inputName); pNorth.add(new Label(Score:); pNorth.add(inputScore); pNorth.add(button); add(pNorth,BorderLayout.NORTH); add(showArea,BorderLayout.CENTER); setSize(3

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

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