java基础面试题

java经典面试题分享

  • 一 ConcurrentModificationException异常出现的原因

首先我们在主方法中中运行一段代码:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(2);
		Iterator<Integer> iterator = list.iterator();
		while (iterator.hasNext()) {
			Integer integer = iterator.next();
			if (integer == 2)
				list.remove(integer);
		}
	}

这段代码是有问题的,我们看一下运行后的结果:
在这里插入图片描述
那么针对这个错误我们怎么解决:
我们先来分析一下,list调用remoce()这个方法,最终这个方法是调用了其他方法:
在这里插入图片描述
最后导致了modCount和expectedModCount不一致而产生了这个异常。那怎么来解决那?
解决办法:在迭代器中如果要删除元素的话,需要调用Iterator类的remove方法。

public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(2);
		Iterator<Integer> iterator = list.iterator();
		while (iterator.hasNext()) {
			Integer integer = iterator.next();
			if (integer == 2) {
				//list.remove(integer);
				//这里我们用迭代器的remove()方法来进行删除
				iterator.remove();
				System.out.println("删除成功");
			}
		}

运行结果:
在这里插入图片描述

  • 二 HashMap和HashTable、ConcurrentHashMap区别?
    相同点:
    HashMap和Hashtable都实现了Map接口
    都可以存储key-value数据
    不同点:
    HashMap可以把null作为key或value,HashTable不可以
    HashMap线程不安全,效率高。HashTable线程安全,效率低。
    HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。
    什么是fail-fast?
    就是最快的时间能把错误抛出而不是让程序执行。
    此外:Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。
    ConcurrentHashMap将整个Map分为N个segment(类似HashTable),可以提供相同的线程安全,但是效率提升N倍,默认N为16。
    不过,我们也可以让一个普通的HashMap同步(只不过效率很差):
    Map m = Collections.synchronizeMap(hashMap);
  • 三 为什么将一个数组使用Arrays.asList()方法转换的list不能进行增加和删除?
    下面我们来看一下:
    在这里插入图片描述
    我们来看一下上面的代码,好像是没有什么问题的。至少编译是不会有问题的。
    但是运行就会报出如下的错误:
    在这里插入图片描述
    这是为什么呐?
    这是因为:使用 Arrays.asList(arr) 转换的 List 并不能进行 add 和 remove 操作。
    查看源码得知:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    所以。肯定不能进行增加和删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值