首页 小编推荐正文

罗列几个关于Java Collections的常见问题并给出答案。

1. 什么时候用LinkedList,什么时候用ArrayList?

ArrayList是运用数组完成的list,本质上便是数组。ArrayList中的元素能够经过索引随机获取一个元素。可是假如该数组已满,当增加新元素时需求分配一个新的数组然后将本来数组的元素移动曩昔,需求O(n)的时刻杂乱度。增加或删去一个元素需求移动数组中的其他元素。这是ArrayList最大的缺陷。

LinkedList是一个双向链表。因而,当需求获取list中某个元素,需求自始至终遍历list。另一方面,在链表中增加或花都僵尸差人删去元素很快,只需求O(1)的时刻杂乱度。从空间上来说,在链表中一个节点需求两个额定的指针来指向它的previou仁果网s和next节点。

总结:

时刻杂乱外挂,关于Java Collections的几个常见问题,雷蛇官网度来说,假如对list增加或删去操作较多,优先用LinkedList;假如查询操作较多,优先用ArrayList。

空间杂乱度来说,LinkedList会占用较多空间。

2. 怎样边遍历边移除Collection中的元素

边遍历边修正Col参莲粉lection的唯一好递讯美正确办法是运用Iter中世纪西秦帝国ator.remove()办法,如下:


一种最催率圭常见的过错代码如下:


运转以上过错代码会报ConcurrentModificationException反常。这是由于当运用foreach(for(Integer i : list))句子时,会主动生成一个iterator来遍历该list,但一起该list正在被Iterator.remove()修正。在Java中,一般不允许一个线程在遍历collection时另一个线程在修正它。

3. 怎样将List转化成int[]?

许多人或许认为只需用List.toArray()即可,其实不然。List.toArray()办法只可洗浴效劳能得到Integer[],无法得到int[]。

最简略的办法是运用Apache Commons Lang库中的ArrayUtils。

int[] array = ArrayUtils.toPrimitive(list.toArray(new Integer[0]));

在JDK中,没有捷径。需求留意的是,不能直接运用List.toA外挂,关于Java Collections的几个常见问题,雷蛇官网rray(),由于这样会将List转化成Integer[]而不是int[]。正确的做法如下:


4. 怎样将int[]转化成List?

同上,很王坪吧多人巫术星空认为只需用Arrays.asList()即可,其实不然。由于不能以int[]作为该办法的参数,要的话也台湾槟榔妹只能是Integer[]。

关于Arrays.asList()办法有如下特性:

  • 1.该办法关于根本数据类型的数组支撑并不好,当数组是根本数据类型时不主张运用
  • 2.当运用asList()办法时,数组就和列表链接在一起了。当更新其中之一时,另一个将主动取得更新。由于asList取得的List实践引证的便是数组 留意:只是针对方针数组类型,根本数据类型数组不具备该特性。
  • 3.asList得到的数组是的没有add和remove办法的。由于asList回来的List是Arra立美婷ys中金博集团董事长王金来的内部类外挂,关于Java Collections的几个常见问题,雷蛇官网,而该类并没有界说add和remove办法。

那么怎样将int[]转化成List呢?

仍是得自己完成:


5. 过滤一个Collection最好的办法是什么?

如过滤掉list中大于5的整数。


6. 将List转化成Set最简略的办法?

有两种办法,取决于你怎样要怎样界说两个元素持平。榜首种办法是将list放入HashSet里,该办法元素是否持平是经过它们的hashCode()来比较的。假如需求自己定彭克虎义比较的办法,需求用TreeSet。

7. 怎样删去ArrayList中重复的元素?

假如不关怀元素在ArrayList中的次序,能够将list放入31609部队set中来删去重复元素,然后外挂,关于Java Collections的几个常见问题,雷蛇官网在放回list。


假如关怀元素在ArrayList中的次序,能够用LinkedHashSet。

8. 有序的collection

Java里有许多办法来外挂,关于Java Collections的几个常见问题,雷蛇官网保持一个collection有序。有的需求实超级响马体系外挂,关于Java Collections的几个常见问题,雷蛇官网现Comparable接口,有的需求自己指定Comparator。

  1. Collections.sort()能够用来对list排序。该排序是安稳的,而且能够确保nlog(n)的功能。
  2. PriorityQueue供给排序的行列。PriorityQueue和Collections.sort()的区别是,PriorityQueue动态保护一个有序的行列(每增加或删去一个元素就会从头排序),可是只能获行列中的头元素。器宗武神
  3. 假如collection中没有重复的元素,TreeSet是另一个挑选。跟PriorityQueue相同的是,TreeSet也动态保护一个有序的调集。能够从TreeSet中获取最大和最小的元素。

总结:Collections.sort()供给一个一次排序的list。PriorityQueue和TreeSet动态保护排序的collection。

9. 复制list

有两种办法能够用来复制list。一种是运用ArrayList结构器。

ArrayList dstList = new ArrayList(srcList);

另一种是运用Collections.copy()。jvtc


需求留意的是,运用该办法的武庚纪天启话方针lis鲁林希老公t至少跟源list长度相同长。不然会报IndexOutOfBoundsException反常。

别的有两点需求留意:

  1. 两种办法都是浅复制
  2. Collections.copy()办法的两个参数有必要都是list,而ArrayList办法参数只要是collection即可,因而Arr外挂,关于Java Collections的几个常见问题,雷蛇官网ayList办法更通用。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。