第一个元素在java.util.List中被重写

时间:2016-10-13 06:02:37

标签: java arrays collections

我有一个转换为String数组的列表。在数组的索引0处,我已经分配了字符串"Select a value"。现在,当我迭代String数组时,第一个元素被我指定为&#34的值覆盖;选择一个值"。

以下是代码:

List<LocalDate> localDatesList = new ArrayList<LocalDate>();
localDatesList.add(new LocalDate());
localDatesList.add(new LocalDate().plusDays(1));
localDatesList.add(new LocalDate().plusDays(2));
localDatesList.add(new LocalDate().plusMonths(1));
localDatesList.add(new LocalDate().plusMonths(2));
List<String> tempDatesList = new ArrayList(localDatesList.size());
for (LocalDate date : localDatesList) {
    tempDatesList.add(date.toString());  
}
String[] formattedDates = tempDatesList.toArray(new String[localDatesList.size()]);
formattedDates[0]="Select a value";
for (String dates : formattedDates) {
    System.out.println(dates);
}

输出:

2016-10-14
2016-10-15
2016-11-13
2016-12-13

我尝试将大小增加1,但在最后一个索引处添加null,并且它没有显示当前日期(我在列表中添加的第一个元素)。

请建议我缺少的内容,如何在列表中的索引零或第一个元素处添加值"Select a Value"。当我添加formattedDates[0]="Select a value"时,列表中缺少第一个元素。

4 个答案:

答案 0 :(得分:2)

你在这一行中压倒了你的第一个要素:

  

formattedDates [0] =“选择一个值”;

像这样更改代码并在循环之前添加“选择值”:

List<LocalDate> localDatesList = new ArrayList<LocalDate>();
localDatesList.add(new LocalDate());
localDatesList.add(new LocalDate().plusDays(1));
localDatesList.add(new LocalDate().plusDays(2));
localDatesList.add(new LocalDate().plusMonths(1));
localDatesList.add(new LocalDate().plusMonths(2));

List<String> tempDatesList = new ArrayList(localDatesList.size());
tempDatesList.add("Select a value");
for (LocalDate date : localDatesList) {
    tempDatesList.add(date.toString());
}

String[] formattedDates = tempDatesList.toArray(new String[localDatesList.size()]);
for (String dates : formattedDates) {
    System.out.println(dates);
}

答案 1 :(得分:0)

  

你自己压倒第一个元素。您不能增加数组的大小,无论您为将使用该值更新的特定位置分配什么。如果您更改它将更改该特定位置。

在您的代码中,您指定0位置并选择一个值(formattedDates[0]="Select a value";)。

因此,在将列表更改为数组之前,将"Select a value"添加到列表然后转换。然后它将正常工作。

tempDatesList.add("Select a value");

然后添加日期

for (LocalDate date : localDatesList) {
    tempDatesList.add(date.toString());  
}

然后

tempDatesList.toArray(new String[localDatesList.size()]);

以下是精炼代码:

List<String> localDatesList = new ArrayList<String>();
localDatesList.add(LocalDate.now().toString());
localDatesList.add(LocalDate.now().plusDays(1).toString());
localDatesList.add(LocalDate.now().plusDays(2).toString());
localDatesList.add(LocalDate.now().plusMonths(1).toString());
localDatesList.add(LocalDate.now().plusMonths(2).toString());
localDatesList.add("Select a value");
String[] formattedDates = localDatesList.toArray(new String[localDatesList.size()]);
for (String dates : formattedDates) {
    System.out.println(dates);
}

答案 2 :(得分:0)

当您输入值&#34;选择一个值&#34;你改变了数组的第一个值。你可以这样做:

String[] formattedDates = new String[localDatesList.size() + 1];
formattedDates[0]="Select a value";
System.arraycopy(tempDatesList.toArray(), 0, formattedDates, 1, tempDatesList.toArray().length);

答案 3 :(得分:-1)

我已经为你修改了代码。

public static void main(final String arhgsp[]) {
    final List<LocalDate> localDatesList = new ArrayList<>();
    localDatesList.add(LocalDate.now());
    localDatesList.add(LocalDate.now().plusDays(1));
    localDatesList.add(LocalDate.now().plusDays(2));
    localDatesList.add(LocalDate.now().plusMonths(1));
    localDatesList.add(LocalDate.now().plusMonths(2));
    final List<String> tempDatesList = new ArrayList<>(localDatesList.size());
    for (final LocalDate date : localDatesList) {
        tempDatesList.add(date.toString());
    }
    final String[] formattedDates = tempDatesList.toArray(new String[localDatesList.size()]);
    formattedDates[0] = "Select a value";
    for (final String dates : formattedDates) {
        System.out.println(dates);
    }
}

产生了输出

Select a value
2016-10-14
2016-10-15
2016-11-13
2016-12-13

希望这对你有用。