Java 如何从ArrayList中删除项,然后添加回删除位置?

Java 如何从ArrayList中删除项,然后添加回删除位置?,java,Java,如何从特定索引处的ArrayList中删除,然后将其添加回同一索引,而不会导致ArrayList补偿其项的丢失,并将空空间移动到数组列表的末尾 我试过: public void dischargePatient(int bedNumber) { if (bedNumber < beds.size()) { beds.remove(bedNumber); } } public void dischargePatient(国际床号){ 如果(床号

如何从特定索引处的ArrayList中删除,然后将其添加回同一索引,而不会导致ArrayList补偿其项的丢失,并将空空间移动到数组列表的末尾

我试过:

public void dischargePatient(int bedNumber) {
    if (bedNumber < beds.size()) {
        beds.remove(bedNumber);
    }       
}
public void dischargePatient(国际床号){
如果(床号<床号()){
床。移除(床号);
}       
}

但将患者从床上移除后,这会将bedNumber处的床移动到ArrayList的末尾。如何将其保留在bedNumber中?

您只需指定所需的索引-
beds.add(bedNumber,patient)

这会将添加前的患者推到位置
bedNumber
,然后推到bedNumber+1…,从而使您的列表恢复到原始顺序

公共无效添加(整数索引, 电子元件)

在此列表中的指定位置插入指定元素。将当前位于该位置的元素(如果有)和任何后续元素向右移动(将一个元素添加到其索引中)


您希望改用贴图对象。我对java有点生疏,但你可以这样定义床的地图:

HashMap<Integer,Boolean> occupiedBeds;
HashMap占用数据库;
然后,您可以检查条目是否为
true
,查看床位是否有人,然后在患者出院时将其设置为
false
。您可以将占用床位初始化为一系列的
false
值,或者您可以假设“未设置”状态意味着床上没有人。

您可以使用
床位。获取(床位号)
床位。设置(床位号,患者)
我知道这并不能回答问题,但以这种方式使用列表,期望索引反映床位号,同时也期望列表定义床位是否被占用,这是有点破损,或者至少是非常麻烦的。下面的示例显示了如何更容易地操作集合和地图,它们提供了额外的信息,例如总占用床位,而无需自己编写代码

我建议你使用患者地图而不是列表

Map<Integer,Patient> patientBeds = new HashMap<Integer,Patient>();

patientBeds.add(bedNumber, patient);

patientBeds.remove(bedNumber);

patientBeds.contains(bedNumber); // is this bed taken?

patientBeds.size(); // total occupied beds, regardless of their numbers

如果希望继续使用ArrayList,那么可以使用方法“set(index,null)”而不是调用方法“remove(index)”。这将确保您的订单不会更改

例如:

                   0  1  2  3
ArrayList items: [ A, B, C, D ]
items.set(2, null);
                   0  1   2    3
          items: [ A, B, null, D ]
int totalBeds = 10;

if (bedNumber > totalBeds) {
  // send them to the next ward
}
                   0  1  2  3
ArrayList items: [ A, B, C, D ]
items.set(2, null);
                   0  1   2    3
          items: [ A, B, null, D ]