【问题标题】:How to add item to ArrayList by Thread in Java如何在 Java 中通过线程将项目添加到 ArrayList
【发布时间】:2016-03-20 11:56:23
【问题描述】:

我想生成客户对象并将它们存储在 ArrayList 中,但我做不到。

这是我的客户类

public class Customer {
private int customerID;
private int processTime;

ArrayList<Integer> customerIDList = new ArrayList<>();
ArrayList<Integer> processTimeList = new ArrayList<>();

public int getCustomerID() {
    return customerID;
}

public void setCustomerID(int customerID) {
    this.customerID = customerID;
}

public int getProcessTime() {
    return processTime;
}

public void setProcessTime(int processTime) {
    this.processTime = processTime;
}

public ArrayList<Integer> getCustomerIDList() {
    return customerIDList;
}

public void setCustomerIDList(ArrayList<Integer> customerIDList) {
    this.customerIDList = customerIDList;
}

public ArrayList<Integer> getProcessTimeList() {
    return processTimeList;
}

public void setProcessTimeList(ArrayList<Integer> processTimeList) {
    this.processTimeList = processTimeList;
} 
}

CustomerThread 类生成客户对象 10 次,两个客户之间 100 毫秒

public class CustomerThread extends Thread {
Customer c = new Customer();
Methods method = new Methods();

@Override
public void run() {

    for(int i = 1; i <= 10; i++) {
        try {
            //c.setCustomerID(i); 
            //c.setProcessTime(method.generateProcessTime());

            c.getCustomerIDList().add(i);
            c.getProcessTimeList().add(method.generateProcessTime());

            System.out.println("ID  : " + c.getCustomerIDList().get(i) + " - Process Time : " + c.getProcessTimeList().get(i));
            Thread.sleep(100);   
        }
        catch (InterruptedException ex) {
            Logger.getLogger(CustomerThread.class.getName()).log(Level.SEVERE, null, ex);
        }
    }   
} 
}

generateProcessTime 的方法是生成随机 int 数,没有问题。 这是我的测试课

public class Test {
public static void main(String[] args) {

    CustomerThread ct = new CustomerThread();

    ct.start();

}
}

当我执行这些时,会发生这个错误,

线程“Thread-0”java.lang.IndexOutOfBoundsException 中的异常:索引:1,大小:1

【问题讨论】:

    标签: java arraylist


    【解决方案1】:

    您正在将号码 1..10 添加到列表中

    c.getCustomerIDList().add(i);
    

    但是你试图在索引1..10检索数字

    c.getCustomerIDList().get(i)
    

    但是列表是从0 索引的,这就是为什么你会得到IndexOutOfBoundsException
    您应该从0..9 迭代并添加价值i + 1

    for(int i = 0; i < 10; i++) {
      ...
      c.getCustomerIDList().add(i + 1);
      ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      • 2018-10-21
      • 2016-09-22
      • 2017-09-26
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多