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