java集合相关面试题

1、请讲下Java里面的容器 

java里面的容器分两大类,Map和Collection

Map:

Map集合用键-值映射存放对象,Map容器中的键对象不能重复,值对象可以重复

主要常用的实现类有HashMap、Hashtable、LinkedHashMap 、TreeMap

HashMap的键-值都可以为空(null),HashMap里面存入的键值对在取出的时候是随机的

Hashtable的键-值都不可以为空(null),线程安全  一般情况下用HashMap

TreeMap取出来的是排序后的键值对。

LinkedHashMap 是HashMap的一个子类,可以让输入的数据跟输出的数据顺序相同

 

Collection 分为List、Set

List:

List集合的元素可以重复,List比较常用的子类分别为ArrayList、LinkedList

ArrayList:用于对象的随机访问速度快,没有顺序

LinkedList:实现机制是链表式的,和顺序有关,速度比ArrayList慢当要快速获取一个值时,用ArrayList,用于顺序插入操作时,用LinkedList.

 

Set

Set集合中的元素不可以重复,Set比较常用的子类分别为:HashSet、TreeSet

HashSet中的元素不能重复,没有顺序,TreeSet中的元素也不能重复,但有顺序,当集合中的元素需要排序时,用TreeSet
一般情况下用HashSet,因为不需要排序,速度比TreeSet快

 

2、请说下Iteratoretrt的作用 

它是一个迭代器可以实现Collection接口的方法,可以一个一个地获取集合中的元素在遍历集合时 可判断是否有下一个元素

 

3、什么是泛型,怎么使用的,有什么好处?

 定义一个集合时,可以知道里面定义的是什么类型,使用:在集合类型后面加< 数据类型 >使用泛型后,从集合中取得元素后就不用再用强转

 

4、什么是for each循环,它可以循环那些数据类型

for each也可以叫增强型循环,通过对象拿到集合里的值,因为扩展性比较强,建议多使用可以用来循环集合和数组

 

5、什么是强转怎么写的,有什么优缺点,一般要多用还是少用,为什么

一般在继承的基础上用.一般是范围小的转换成范围大的,譬如byte可以转换成int,还可以子类转换成父类,反之则不行。

把运行期的强转为编译期的.编译期不会出错.运行期容易出错.所以一般少用

 

6、Collections和Collection有什么区别

Collections是一个工具类,可以直接调用List和Set的方法
Collection是一个接口,是List和Set集合的父接口

 

7、写出Collections的6个方法,并详细解释

sort():对集合进行排序
shuffle():打乱集合中的元素顺序
addAll():将一个集合添加到另一个集合中
max():判断集合中的最大值
min():判断集合中的最小值
copy():将一个集合中的元素复制到另一个集合中去
fill():将一个集合中的元素全部替换成指定的元素

 

8、Arrays类是做什么的,写出它的常用6个方法

 Arrays是数组的一个工具类
sort():对数组进行排序
binarySearch:搜索数组指定元素的下标
copyOf():复制数组中指定长度的元素
deepEquals():比较两个数组的深度
fill():把数组中的所有元素替换成指定元素
equals():比较指定两个数组的元素是否相等

 

9、比较下集合和数组的优缺点

 集合是多个对象的容器,可以将不同数据类型的多个对象组织在一起,数组是把有相同数据类型的数据集合,数组是很多语言都支持的底层数据结构,性能上是最高的

 

10、如何对一个对象排序,有几种方法

方案一:把对象放入List集合中,用Collections工具类调用sort()方法进行排序,但是这个类必须实现Compable接口才行

方案二:把对象放在Set集合中,用TreeSet()实现类对集合直接排序

 

11、在集合里面怎么判断两个对象相等,要实现什么方法

 equals方法

 

12、怎么样把集合转化成数组,或把数组转化为集合

把集合转为数组,可以用toArray()方法 
把数组转为集合时, foreach循坏拿出数组里面的值,直接放到集合里。

 

13、Hashtable名字为什么没有驼峰命名

 Hashtable的由来比较古老,当时还没有命名规范

 

14、分别写出List,Set,Map里面的5个常用方法

 List:

add() :新增

clear():清除

contains():判断是否包含某个元素 

indexOf():一个元素在集合中首次出现的位置

set():把指定下标的元素替换成自定义元素


Set:

add():新增

clear():清除

contains():判断是否包含某个元素
remove():把集合中指定下标的元素删掉
size():返回集合长度


Map:

containsKey():是否包含指定key 

containsValue():是否包含指定value 

keySet():返回所有key 

put():添加元素

Remove():移除

 

15、在List里面怎么去掉重复的数?

把List里面的数据放入HashSet可以去除重复

 

16、在List里面有几种排序?

两种:

一、实现Comparable<Article>接口,实现里面的CompareTo方法进行排序。

二、调用Collections里面的ssort()方法排序!

 

17、说一下链表跟数组的区别

链表没有长度。数组有长度,必须事先定义固定的长度,长度不可以改变。链表没有下标,数组有下标,注意数组的下标越界,链表占用的内存小,数组占用内存比较大,增删用链表,查看用数组。

 

18、HashSet的理解

HashSet实现了Set接口,HashSet不保证集合的迭代顺序,允许使用Null元素。HashSet的底层使用了HashMap,使用HashMap对集合的元素进行操作,然后再封装成HashSet操作。

 

19、什么类可以实现有序存储(除ArrayList以外)

一种按照插入的顺序排序,譬如LinkedList,LiskedHashMap,另外一种是插入后重新排序TreeSet,TreeMap 

 

20、HashMap和ArrayList是不是都是线程不安全的? 

ArrayList、HashMap线程都是不安全的;还有我们常见的一些JAVA集合都是线程不安全,这样做是为了提高性能

 

21、ArrayList集合加入1万条数据,应该怎么提高效率

因为ArrayList的底层是数组实现,并且数组的默认值是10,如果插入10000条要不断的扩容,耗费时间,所以我们用ArrayList的指定容量的构造器方法ArrayList(int size) 就可以实现不扩容,就提高了性能

 

22、你知道HashMap底层是怎么实现的吗?

简单的说是一个数组,因为数组的性能比较好,数组里面放的是Entry类,HashMap类有一个叫做Entry的内部类。这个Entry类包含了key-value作为实例变量。当存储或者获取对象的时候,就根据哈希算法,对象的hashCode调用得到这个下标,以便实现快速访问.

 

23、怎样遍历List Set,Map

List 和Set可以通过一般for循环,迭代器循环,或者增强型循环来遍历, 其中一般for循环性能最快,迭代器循环可以判断和得到下一个值,for each增强型循环扩展性强,但性能稍低.

Map循环可以通过keySet得到Key的Set集合,然后遍历这个集合就可以得到所有的Value

 

24、你对栈与队列了解多少你是怎么用的。

队列是一种数据结构,FIFO 先进先出有点类似与栈,只是在队列中第一个插入的数据项也会被最先删除,
队列的两个基本操作:
一个是插入一个数据项,即把一个数据项放入队尾
另一个是移除一个数据项,即移除队头的数据项.

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值