在mysql中,可以执行以下操作:
select * from sometable order by id desc limit 3 offset 0;
它将返回前3个结果。在java中如何实现这样的功能?
如果我有 ArrayList
奇数元素:
ArrayList<String> ids = new ArrayList<String>();
ids.add("1");
ids.add("2");
ids.add("3");
ids.add("4");
ids.add("5");
ids.add("6");
ids.add("7");
ids.add("8");
ids.add("9");
ids.add("10");
ids.add("11");
一个人怎样才能从中得到3个结果呢 ArrayList
对于每个偏移量(如果没有更多元素,则小于3)?
例如,假设限制总是3和 offset = 0
:
它应该吐出1,2,3 if offset = 3
:
4,5,6 offset = 6
:
7,8,9 offset = 9
:
10,11
我目前的做法是创建列表的子列表:
int endOf = offset+3;
ArrayList<String> ids2 = new ArrayList<String>(ids.subList(offset, endOf));
但当偏移量大于ID的大小时它就会中断。。。
如果ArrayList不能做到这一点,还有更好的方法吗?
编辑:
基于这两个答案,安迪的方法似乎表现得更好:
long startTime = System.nanoTime();
//tried each method here
long stopTime = System.nanoTime();
System.out.println(stopTime - startTime);
无流:
40960
17167
13854
10240
对于流:
303584
118060
47284
40357
编辑2:
以上的基准测试决不能依赖。有关更多信息,请参见:how do i write a correct micro benchmark in java?
3条答案
按热度按时间hvvq6cgz1#
跳过应该是
pageno
次limit
kzmpq1sx2#
只需钳制
subList
:如果您发现语法不方便,请编写一个helper方法,例如。
xkrw2x1b3#
这可以通过流来实现: