如何将成员添加到数组列表的后面或前面



我正在尝试使用数组列表,并且我有一行坐标。我想将这一行中的所有坐标移到前面或后面。我不确定我的代码是否正确。

List<Coordinate> coordinates = new ArrayList<>();
void addCoordinateToList(Coordinate singleCoordinate) {
coordinates.add(singleCoordinate)
}
void addCoordinateToBackList(ArrayList<> coordinateList) {
for(int i = 0; i < coordinates.size(); i++) {
coordinateList.add(i, coordinateList(i));
}
}
void addCoordinateToFrontList(ArrayList<> coordinateList) {
for(int i = coordinates.size(); i > 0; i--) {
coordinateList.add(i, coordinatesList(i));
}
}

这并不是最终的代码,它只是暂时把想法写出来。

这里不需要使用for循环。

相反,您可以使用addAll方法来实现您想要的:

void addCoordinatesToBack(List<Coordinate> coordinateList) {
coordinates.addAll(coordinateList);
}
void addCoordinatesToFront(List<Coordinate> coordinateList) {
coordinates.addAll(0, coordinateList);
}

addAll有两种形式:

  • addAll(Collection c)将指定的Collection的所有元素添加到列表的末尾
  • CCD_ 6将指定的CCD_。使用位置0将它们添加到列表的开头

还要注意,我在参数中使用了List而不是ArrayList,因为这使它更加灵活。


请注意,这与反转列表并不完全相同。

此功能内置在List界面中。您可以使用以下功能:

List<String> myList = new ArrayList<>();
//adds to the end of the list
myList.add("reading");
myList.addAll(List.of("the","documentation","first!"));
//adds to the front of the list
myList.add(0,"with");
myList.addAll(0,List.of("It","begins");

您的代码

void addCoordinateToBackList(ArrayList<> coordinateList) {
for(int i = 0; i < coordinates.size(); i++) {
coordinateList.add(i, coordinateList.get(i));
}
}

将无休止地将原始列表的第一个元素添加到其自身的开头。请注意,我已将调用添加到List.get(int)

由于索引i=coordinates.size()越界,最后一个方法将抛出ArrayIndexOutOfBounds异常。您可能需要更改

void addCoordinateToFrontList(ArrayList<> coordinateList) {
for(int i = coordinates.size() - 1; i >= 0; i--) {
coordinateList.add(i, coordinatesList.get(i));
}
}

但这将再次无休止地添加列表的最后一个元素。

也许你想要实现的是:

List<Object> coordinateList = new ArrayList<>();
...
java.util.Collections.reverse(coordinateList);

这将颠倒列表中元素的顺序。请注意,它将对给定的列表起作用,不会返回任何内容。这只适用于可修改的列表。

编辑:你可能是想";"旋转";元素,对吧?还有方法Collections.rotate(List input, int distance)。文件:

将指定列表中的元素旋转指定的距离。调用此方法后,索引i处的元素将是之前索引(i-distance(mod-list.size((处的元素,用于0和list.size((含(-1之间的所有i值。(此方法对列表的大小没有影响。(例如,假设列表包括[t,a,n,k,s]。调用Collections.rotate(list,1((或Collections.rotat(list,-4((后,list将包括[s,t,a,n,k]。

这在两个方向上都有效。

相关内容

最新更新