java list 移动元素_java – 将列表的第一个元素移动到结尾

有没有聪明的方法呢?我最好的方法是:

object next = list.get(0) ;

list.remove(0) ;

list.add(next) ;

如果没有,是否有任何类型的集合,将使这更容易?我不喜欢临时对象需要存储我想移动的元素..

编辑:我用我的代码测试了下面列出的命题:

long starttime = System.nanoTime() ;

for (int i = 0; i < ntours; i++){

profit += retrieveGroupsWillPlay(groups, ngroups, limit) ;

}

long endtime = System.nanoTime() ;

System.out.println("Timing: " + (endtime - starttime)) ;

System.out.println("Profit: " + profit) ;

结果如下:(利润:15,确保结果适合我的代码)

码:

private static int retrieveGroupsWillPlay(ArrayList queue,int ngroups, int limit) {

int peopleWillPlay = 0 ;

for (int i = 0; i < ngroups; i++){

int nextGroup = queue.get(0) ;

if(limit >= peopleWillPlay + nextGroup) {

peopleWillPlay += nextGroup ;

queue.add(nextGroup) ;

queue.remove(0) ;

}

else break ;

}

return peopleWillPlay ;

}

结果:

Timing: 23326

Profit: 15

Timing: 22171

Profit: 15

Timing: 22156

Profit: 15

Timing: 22944

Profit: 15

Timing: 22240

Profit: 15

Timing: 21769

Profit: 15

Timing: 21866

Profit: 15

Timing: 22341

Profit: 15

Timing: 24049

Profit: 15

Timing: 22420

Profit: 15

码:

private static int retrieveGroupsWillPlay(ArrayList queue,int ngroups, int limit) {

int peopleWillPlay = 0 ;

for (int i = 0; i < ngroups; i++){

int nextGroup = queue.get(0) ;

if(limit >= peopleWillPlay + nextGroup) {

peopleWillPlay += nextGroup ;

Collections.rotate(queue, -1) ;

}

else break ;

}

return peopleWillPlay ;

}

结果:

Timing: 92101

Profit: 15

Timing: 87137

Profit: 15

Timing: 84531

Profit: 15

Timing: 105919

Profit: 15

Timing: 77019

Profit: 15

Timing: 84805

Profit: 15

Timing: 93393

Profit: 15

Timing: 77079

Profit: 15

Timing: 84315

Profit: 15

Timing: 107002

Profit: 15

码:

private static int retrieveGroupsWillPlay(ArrayList queue,int ngroups, int limit) {

int peopleWillPlay = 0 ;

for (int i = 0; i < ngroups; i++){

int nextGroup = queue.get(0) ;

if(limit >= peopleWillPlay + nextGroup) {

peopleWillPlay += nextGroup ;

queue.add(queue.remove(0)) ;

}

else break ;

}

return peopleWillPlay ;

}

结果:

Timing: 28079

Profit: 15

Timing: 28994

Profit: 15

Timing: 29525

Profit: 15

Timing: 22240

Profit: 15

Timing: 38326

Profit: 15

Timing: 33742

Profit: 15

Timing: 21500

Profit: 15

Timing: 22714

Profit: 15

Timing: 20939

Profit: 15

Timing: 30157

Profit: 15

码:

private static int retrieveGroupsWillPlay(LinkedList queue,int ngroups, int limit) {

int peopleWillPlay = 0 ;

for (int i = 0; i < ngroups; i++){

int nextGroup = queue.get(0) ;

if(limit >= peopleWillPlay + nextGroup) {

peopleWillPlay += nextGroup ;

queue.addLast(queue.removeFirst()) ;

}

else break ;

}

return peopleWillPlay ;

}

结果:

Timing: 31104

Profit: 15

Timing: 42332

Profit: 15

Timing: 36443

Profit: 15

Timing: 31840

Profit: 15

Timing: 31387

Profit: 15

Timing: 32102

Profit: 15

Timing: 31347

Profit: 15

Timing: 30666

Profit: 15

Timing: 32781

Profit: 15

Timing: 32464

Profit: 15

码:

private static int retrieveGroupsWillPlay(LinkedList queue,int ngroups, int limit) {

int peopleWillPlay = 0 ;

for (int i = 0; i < ngroups; i++){

int nextGroup = queue.get(0) ;

if(limit >= peopleWillPlay + nextGroup) {

peopleWillPlay += nextGroup ;

queue.offer(queue.poll()) ;

}

else break ;

}

return peopleWillPlay ;

}

结果:

Timing: 35389

Profit: 15

Timing: 34849

Profit: 15

Timing: 43606

Profit: 15

Timing: 41796

Profit: 15

Timing: 51122

Profit: 15

Timing: 59302

Profit: 15

Timing: 32340

Profit: 15

Timing: 35654

Profit: 15

Timing: 34586

Profit: 15

Timing: 35479

Profit: 15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值