
第一个坑
Set set = new HashSet <>();for (int i = 0; i <100; i++) { set.add(i); set.remove(i-1);}System.out.println(set.size());结果是什么?
现在换一个
Set set = new HashSet <>();for (short i =0 ; i < 100 ; i++) { set.add( i ); set. remove( i -1 ); } System.out.println(set.size());这次输出什么?
如果不能确定的话,手动运行一下。
第二个坑
Object i = 1 == 1 ? new Integer(3) : new Float(1 ); System.out.println( i );它输出什么?
如果没猜对,先自己找答案
第三个坑
这个是在写功能时实际碰到的,看似风平浪静,结果一运行,甩你一个异常。
// id, nameMap map = new HashMap<>();map.put(1L, "1111");map.put(2L, "2222");map.put(3L, "3333");// 后面需要调用的一个方法入参是long[] 类型,// map.keySet()可以拿到id的列表,toArray方法可以转化数组// ArrayUtils.toPrimitive方法可以把对象数据转化为基本类型数组// 然后,我就这样写了long[] ids = ArrayUtils.toPrimitive((Long[])map.keySet().toArray());自以为写的没问题,结果一运行,抛了个异常
Exception in thread "main" java.lang.ClassCastException:[Ljava.lang.Object; cannot be cast to [Ljava.lang.Long;其实这种抛异常还好,至少告诉你错了,最怕那种,运行之后默默返回了不符合预期的结果。
最后,看到方法注释,为了得到Long[],需要这样。
map.keySet().toArray(new Long[0]);你曾经不小心碰到过哪些坑?
欢迎留言。
本文通过三个具体的例子探讨了Java集合使用中容易忽视的问题:HashSet元素添加与移除的顺序影响、Object类型变量的装箱行为及HashMap键值转换数组过程中出现的ClassCastException异常原因与正确做法。
6257

被折叠的 条评论
为什么被折叠?



