JavaSE-练习⾯试题⽬[8]集合框架
1.Collection 和 Collections的区别
答:Collection是集合类的上级接⼝,继承于他的接⼝主要有Set 和List.
Collections是针对集合类的⼀个帮助类,他提供⼀系列静态⽅法实现对各种集合的搜索、排序、线程安全化等操作
2.Set⾥的元素是不能重复的,那么⽤什么⽅法来区分重复与否呢? 是⽤==还是equals()? 它们有何区别
答:Set⾥的元素是不能重复的,⽤equals()⽅法判读两个Set是否相等 equals()和==⽅法决定引⽤值是否指向同⼀对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值
3.List, Set, Map是否继承⾃Collection接⼝
答: List,Set是,Map不是
4.两个对象值相同(x.equals(y) == true),但却可有不同的hashcode,这句话对不对
答:不对,有相同的 hashcode
5.说出ArrayList,Vector, LinkedList的存储性能和特性
答:ArrayList和Vector都是使⽤数组⽅式存储数据,此数组元素数⼤于实际存储的数据以便增加和插⼊元素,它们都允许直接按序号索引元素,但是插⼊元素要涉及数组元素移动等内存操作,所以索引数据快⽽插⼊数据慢,Vector由于使⽤了synchronized⽅法(线程安全),通常性能上较ArrayList差,⽽LinkedList使⽤双向链表实现存储,按序号索引数据需要进⾏前向或后向遍历,但是插⼊数据时只需要记录本项的前后项即可,所以插⼊速度较快。
6.HashMap和Hashtable的区别
答:
1.HashMap与Hashtable都实现了Map接⼝。由于HashMap的⾮线程安全性,效率上可能⾼于Hashtable。Hashtable的⽅法是Synchronize 的,⽽HashMap不是,在多个线程访问Hashtable时,不需要⾃⼰为它的⽅法实现同步,⽽HashMap 就必须为之提供外同步。
2.HashMap允许将null作为⼀个entry的key或者value,⽽Hashtable不允许。
3.HashMap把Hashtable的contains⽅法去掉了,改成containsvalue和containsKey。因为contains⽅法容易让⼈引起误解。
4.Hashtable继承⾃Dictionary类,⽽HashMap是Java1.2引进的Map interface的⼀个实现。
5.Hashtable和HashMap采⽤的hash/rehash算法都⼤概⼀样,所以性能不会有很⼤的差异。
7.ArrayList和Vector的区别
答:就ArrayList与Vector主要从⼆⽅⾯来说.
⼀.同步性:Vector是线程安全的,也就是说是同步的,⽽ArrayList是线程序不安全的,不是同步的
⼆.数据增长:当需要增长时,Vector默认增长为原来⼀培,⽽ArrayList却是原来的⼀半
8.你所知道的集合类都有哪些?主要⽅法?
答:最常⽤的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变⼤⼩的列表,⽐较适合构建、存储和操作任何类型对象的元素列表。 List 适⽤于按数值索引访问元素的情形。
Map 提供了⼀个更通⽤的元素存储⽅法。 Map 集合类⽤于存储元素对(称作"键"和"值"),其中每个键映射到⼀个值。
9.定义⼀个Collection接⼝类型的变量,引⽤⼀个Set集合的实现类,实现添加单个元素,添加另⼀个
集合,删除元素,判断集合中是否包含⼀个元素,判断是否为空,清除集合,返回集合⾥元素的个数等常⽤操作。
10.创建Set接⼝的实现类,添加10个以上的元素,通过Iterator遍历此集合元素。
11.创建Set接⼝的实现类,添加10个以上的元素,通过foreach遍历此集合元素。
12.创建Set接⼝的实现类,添加10个以上的元素,要求能够排序。
13.创建Car类,包含name,price属性,构造器等⽅法,创建测试类,在main⽅法中创建Set接⼝的实现类,添加5个以上的Car对象,遍历集合元素,验证重复元素是否过滤了;如果没有过滤,实现过滤功能;把每个⼩车的price降10000元,再遍历,查看price是否已改变
14.定义⼀个Collection接⼝类型的变量,引⽤⼀个List集合的实现类,实现添加单个元素,添加另⼀个集合,删除元素,判断集合中是否包含⼀个元素,判断是否为空,清除集合,返回集合⾥元素的个数等常⽤操作。
创建ArrayList实例化对象,添加10个以上的元素,在2号位插⼊⼀个元素,获得5号位元素,删除6号位元素,修改7号位的元素;
15.通过四种⽅法遍历上题中的集合
16.创建LinkedList实例化对象,练习具有队列特点的⽅法
17.按要求实现下列问题:
1)封装⼀个新闻类,包含标题和内容属性,提供get、set⽅法,重写toString⽅法,打印对象时只打印标题;(10分)
2)只提供⼀个带参数的构造器,实例化对象时,只初始化标题;并且实例化两个对象:
新闻⼀:中国多地遭雾霾笼罩空⽓质量再成热议话题
新闻⼆:春节临近北京“卖房热”
3)将新闻对象添加到ArrayList集合中,并且使⽤ListIterator倒序遍历;
4)在遍历集合过程中,对新闻标题进⾏处理,超过15字的只保留前14个,然后在后边加“…”
5)在控制台打印遍历出经过处理的新闻标题;
18.定义⼀个Map接⼝类型的变量,引⽤⼀个实现类,添加键值对,判断集合中是否包含某⼀key值,通过某⼀key值得到value值,通过某⼀key删除键值对,把另⼀个map集合添加到此map集合,判断是
否为空,清除集合,返回集合⾥元素的个数等常⽤操作。
19.通过两种⽅法遍历上题中的map集合
20.使⽤Map接⼝的实现类完成员⼯⼯资(姓名--⼯资)的摸拟:实例化类和实例化对象
1)添加⼏条信息
2)列出所有的员⼯姓名
3)列出所有员⼯姓名及其⼯资
4)删除名叫“Tom”的员⼯信息
5)输出Jack的⼯资,并将其⼯资加1000元(通过取值实现)
6)将所有⼯资低于1000元的员⼯的⼯资上涨20%(通过取值实现)
21.创建有序的map集合的实例化对象,添加元素,查看排序结果
22.封装⼀个新闻类,包含标题、作者、新闻内容和发布时间,新闻标题如下:
新闻⼀:中国多地遭雾霾笼罩空⽓质量再成热议话题
新闻⼆:民进党台北举⾏“⽕⼤游⾏”
新闻三:春节临近北京“卖房热”
新闻四:春节临近北京“卖房热”
1)完成对新闻类的设计,要求在初始化新闻类对象时 ,通过构造传参的形式对新闻标题赋值,并要求实例化四个对象,标题内容如题。
2)要求打印新闻对象时,直接打印新闻标题;
3)要求使⽤equals⽅法⽐较新闻时,只要标题相同,就认为是同⼀新闻,请输出新闻⼀与新闻⼆的⽐较结果,新闻三与新闻四的⽐较结果。4)将新闻对象存⼊HashSet集合中,并且遍历集合,打印新闻类对象;
5)打印集合中新闻数量。
23.使⽤HashMap类实例化⼀个Map类型的对象m1,键(String类型)和值(int型)分别⽤于存储员⼯的姓名和⼯资,存⼊数据如下:
张三——800元;李四——1500元;王五——3000元;
1)将张三的⼯资更改为2600元
2)为所有员⼯⼯资加薪100元;
3)遍历集合中所有的员⼯
4)遍历集合中所有的⼯资
24.创建⼀个List集合的对象,添加⼏个数字,反转对象中元素的顺序;根据元素的⾃然顺序排序;
25.创建⼀个List集合的对象,添加⼏个字符串,反转对象中元素的顺序;根据元素的⾃然顺序排序;
26.创建⼀个List集合的对象,添加⼏条数据,将1号位和2号位交换;获得最⼤值,最⼩值,
27.叙述主要集合实现类的遍历⽅法
28.按要求完成如下操作
1. ⽣成10个随机数,值在100到200之间;
2. 将这⼗个数存⼊HashSet集合中(有可能集合的长度⼩于10)。
3. 将这个HashSet集合转换成ArrayList集合
4. 重新为ArrayList集合排序,按照从⼩到⼤的顺序;
5. 使⽤foreach遍历集合;
29.按要求完成如下操作
1 )封装⼀个汽车类,包含String name、int speed属性,在测试类中实例化三个对象:c1,c2,c3,分别设置name为:“奥拓”,“宝马”,“奔驰”,速度分别设置为:100,200,300
2 )使⽤Map集合对象m1将这三个汽车类对象保存成key,然后将int型的汽车价钱作为值保存在m1的value中,上述三款汽车分别对应的价钱是10000,500000,2000000
3 )遍历m1的键,打印name属性
4 )通过合适的⽅法,求出m1中“宝马”的价格,并打印结果;
5 )经过折旧,所有汽车都降价到原来的80%,请打印降价后“宝马”的价格
30.按要求完成如下操作
1 ) 要求集合对象c1中,只能添加字符串形式的单个元素,元素可以重复,在测试类中为c1集合添加字符串“这是⼀个可以重复的集合”三遍,然后遍历打印结果。
2 )要求集合对象c2中只能添加整型数值,并且不可重复,按⾃然顺序排序。要求遍历集合对象,打印添加进1,2,3,4,5五个数字的c2集合
3 )要求创建⼀个合适的Map集合对象m1,它的键和值都只能是字符串,并且值可以是null,像map集合中添加三组字符串,其中⼀个只有键,值是空,遍历这个集合对象的键,并打印键。
4)想办法将m1中所有值为null都替换成⼀个字符串”这⾥是空值”
5)遍历m1的所有值。
31.以下代码的运⾏结果?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论