知道何时将元素添加/替换为数组列表

时间:2018-01-24 10:44:03

标签: java arraylist

所以我有一系列客户。客户包含firstName,lastName和一系列汽车。

String Firstname 
String Lastname 
Cars car[]

汽车包含

String Make
String Model
String Colour

汽车数量因客户而异,因此一个客户可以拥有2辆汽车,另一个客户可以拥有4辆汽车。 在我的场景中,我有一个客户列表,我正在循环,我想创建他们的汽车数组。但我想以特定的方式做到这一点。所以说我有3个客户和7辆汽车,其中包含以下数据:

[Jim, Bob, [car1, car2]]
[John, Smith, [car3, car4, car5]]
[Jack, Jones, [car6, car7]]

汽车数据是:

Car1 – [Renault, Clio, Red]
Car2 – [Audi, A4, Green]
Car3 – [Seat, Leon, Yellow]
Car4 – [BMW, i8, Black]
Car5 – [Vauxhall, Astra, Silver]
Car6 – [Volkswagen, Golf, Grey]
Car7 – [Subaru, Impreza, Purple]

我想做的是首先遍历客户,然后循环遍历汽车并添加到数组carList。

ArrayList<Car> carsList = new ArrayList<Car>();

For (cust in customers)
{
    var i = 0;    
    For (car in cust.cars)
    {
        carsList.add(car)
        i++ 
    }   
}

但这里是我想要做一些不同的事情。在第一个客户我们有两辆车,这将把这两辆车添加到carsList阵列。第二个客户有3辆车,我希望这些客户的汽车从第一个客户覆盖car1和car2,然后添加car3。在最终客户上,我希望car6和car7从客户2覆盖car3和car4,但保留6号汽车。以下显示每个循环后的输出:

loop1:[car1,car2]

loop2:[car3,car4,car5]

loop3(最终结果):[car6,car7,car5]

我知道我可以使用int变量来跟踪数组的位置(我把它包含在代码中),我知道我可以使用arryList.set来覆盖某个位置的数据。我的问题是,我不希望抛出任何索引超出范围的异常。如何判断何时使用add添加到数组或设置为覆盖现有值?

希望这是有道理的。

感谢您提供任何帮助

1 个答案:

答案 0 :(得分:2)

我会使用索引,但检查大小是否低于索引,因此您不会在IndexOutOfBoundsException中运行:

ArrayList<Car> carsList = new ArrayList<>();
for (Customer cust : customers) {
    for (int i = 0; i < cust.cars.length; i++) {
        if (carsList.size() > i) {
           carsList.set(i, cust.cars[i]);
        } else {
           carsList.add(cust.cars[i]);
        }
    }   
}