8
如何在Java中生成连续整数的列表或数组?
有没有产生一个简短而亲切的方式List<Integer>,或者可能是 Integer[]或int[],与一些连续值start值的end价值? 也就是说,以下内容比以下内容短,但等于1: void List<Integer> makeSequence(int begin, int end) { List<Integer> ret = new ArrayList<>(end - begin + 1); for (int i=begin; i<=end; i++) { ret.add(i); } return ret; } 番石榴的用途很好。 更新: 绩效分析 由于使用本机Java 8和第三方库都可以很好地回答这个问题,所以我认为我应该测试所有解决方案的性能。 第一个测试只是[1..10]使用以下方法测试创建包含10个元素的列表: classicArrayList:我问题中上面给出的代码(与adarshr的回答基本相同)。 eclipseCollections:下面的Donald答案中使用Eclipse Collections 8.0 给出的代码。 guavaRange:下面的daveb答案中给出的代码。从技术上讲,这并不会创建List<Integer>而是ContiguousSet<Integer>-,但是由于它Iterable<Integer>是按顺序实现的,因此大多数情况下可以实现我的目的。 intStreamRange:下面弗拉基米尔的答案中给出的代码,它使用IntStream.rangeClosed()-在Java 8中引入的。 streamIterate:下面的Catalin答案中给出的代码,该代码也使用IntStreamJava 8中引入的功能。 以下是上述所有大小为10的列表的结果,以千千克/秒为单位(数字越大越好): ...再一次列出大小为10,000的列表: 最后一张图表是正确的-除Eclipse和Guava之外的解决方案太慢,甚至无法获得单个像素条!快速的解决方案是其他解决方案的10,000到20,000 倍。 …