每天5道java面试题 -5(集合)

1.常用的集合类有哪些?

        Map和Collection接口是所有集合框架的父接口

        1)Collection接口的子接口包括Set接口和List接口

        2)Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等

        3)Set接口的主要实现类有:HashSet、TreeSet、LinkedHashSet等

        4)List接口的主要实现类有:ArrayList、LinkedList、Stack、Vector等

2.怎么确保一个集合不能被修改?

        可以使用Collection.unmodifiableCollection(Collection c)方法来创建一个只读集合,这样改变集合的任何操作都会抛出Java. lang. UnsupportedOperationException 异常。

        示例代码:

List<String> list = new ArrayList<>(); 
list.add("x"); 
Collection<String> clist = Collections.unmodifiableCollection(list); 
clist.add("y"); // 运行时此行报错 
System.out.println(list. size());

3.迭代器Iterator是什么?怎么使用?有什么特点?

        Iterator接口提供遍历任何Collection的接口。我们可以从一个Collection中使用迭代器方法来获取迭代器实例。迭代器取代了Java集合框架中的Enumeration,迭代器允许调用者在迭代过程中移除元素。

        因为所有的Collection继承了Iterator迭代器

        我们来看一下Collection的源码

 Iterator使用代码如下:
 

List<String> list = new ArrayList<>(); 
Iterator<String> it = list.iterator(); 
while(it.hasNext()){ 
    String obj = it.next(); 
    System.out.println(obj); 
}

        Iterator的特点是只能单向遍历,但是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候,就会抛出ConcurrentModifificationException 异常。

4.遍历一个List有哪些不同的方式?每种方式的实现原理是什么?Java中List遍历的最佳实践是什么?

遍历方式有以下几种:

        1)for循环遍历:基于计数器。在集合外部维护一个计数器,然后依次读取每一个位置的元素,读取到最后一个元素后停止。

        2)迭代器遍历:Iterator是面向对象的一个设计模式,目的是屏蔽不同数据集合的特点,统一遍历集合的接口。Java在Collections中支持了Iterator模式

        3)foreach循环遍历:foreach内部也是采用了Iterator的方式实现,使用时不需显示声明Iterator或者计数器。优点是代码简洁,不易出错;缺点是只能做简单的遍历,不能在遍历过程中操作数据集合,例如删除、替换

最佳实践:

        Java Collections框架中提供了一个RandomAccess接口,用来标记List实现是否支持Random Access。

        如果一个数据集合实现了该接口,就意味着它支持Random Access,按位置读取元素的平均时间复杂度为O(1),如ArrayList。

        如果没有实现该接口,表示不支持Random Access,如LinkedList。

        推荐的做法是,支持Random Access的列表使用for循环遍历,否则建议用Iterator或foreach遍历。

5.数组和集合的区别(什么情况下使用数组什么情况下使用集合)?

        数组可以储存基本数据类型和对象,集合只能储存对象

        数组是固定大小的,集合的大小可以自动扩展

        数组的内置方法没有集合多,比如addAll、removeAll、Iterator等方法只有集合才有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

差点资深程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值