Java ArrayList从1开始而不是0?

时间:2016-01-14 09:50:40

标签: java arraylist

我正在使用DB代码从ff检索一些数据:

List<modelA> list= new ArrayList<modelA>();
list = modelA.getList(parameter);

这是检索到的内容:

list[1] = "var1"

list[2] = "var2"

list[3] = "var3"

list.size() = 3list[0]不存在。

我将列表转移到LinkedHashSet以将索引设置为正确,但它不起作用。清单仍然相同。

Set<modelA> hs = new LinkedHashSet<>();
hs.addAll(list);
list.clear();
list.addAll(hs);

有没有办法修复索引,使其从0开始而不是1?

运行list.get(0)

时出现错误
java.lang.NullPointerException
    at applicationmodels.f08.pv.F08PV008Model.search(F08PV008Model.java:221)
    at controllers.f08.pv.F08PV008.control(F08PV008.java:148)
    at Routes$$anonfun$routes$1$$anonfun$applyOrElse$99$$anonfun$apply$99.apply(routes_routing.scala:1510)
    at Routes$$anonfun$routes$1$$anonfun$applyOrElse$99$$anonfun$apply$99.apply(routes_routing.scala:1510)
    at play.core.Router$HandlerInvoker$$anon$7$$anon$2.invocation(Router.scala:183)
    at play.core.Router$Routes$$anon$1.invocation(Router.scala:377)
    at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:56)
    at play.db.jpa.TransactionalAction$1.apply(TransactionalAction.java:20)
    at play.db.jpa.TransactionalAction$1.apply(TransactionalAction.java:18)
    at play.db.jpa.JPA.withTransactionAsync(JPA.java:177)
    at play.db.jpa.TransactionalAction.call(TransactionalAction.java:15)
    at play.core.j.JavaAction$$anon$3.apply(JavaAction.scala:91)
    at play.core.j.JavaAction$$anon$3.apply(JavaAction.scala:90)
    at play.core.j.FPromiseHelper$$anonfun$flatMap$1.apply(FPromiseHelper.scala:82)
    at play.core.j.FPromiseHelper$$anonfun$flatMap$1.apply(FPromiseHelper.scala:82)
    at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251)
    at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:249)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
    at play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:37)
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:42)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

2 个答案:

答案 0 :(得分:0)

list = modelA.getList(parameter);

来自modelA类的方法getList返回一个构建列表。它建立列表的方式可以是任何东西。它甚至可以在第99位开始。

因此,您需要检查/修复对象在modelA类的列表中的放置方式。

答案 1 :(得分:0)

似乎getList方法返回违反API的List实现(假设List是java.util.List)。 List.get()的api指定如果index == list.size(),所有List实现都应抛出IndexOutOfBoundsException。 您可以创建一个您选择的某种特定类型的列表(例如ArrayList),并将破碎列表的内容放在您创建的列表中:

List<modelA> list= new ArrayList<modelA>(modelA.getList(parameter));

然后你应该得到一个大小为3的列表,其中使用了从零开始的索引。

或者,您可以检查损坏的List实现的类型:

System.out.println(modelA.getList(parameter).getClass().getName());

并尝试修复损坏的List类的实现。但是,如果其他地方的代码依赖于此List实现的基于1的索引,那么这可能会有风险。