我正在构建一个库,该库包含对象列表和字典(映射),这些字典将列表中的对象与其他列表中的对象关联起来
即(在伪代码中):
// list of buses
buses = [Bus1, Bus2, Bus3]
// list of Loads
loads = [Load1, Load2, Load3, Load4]
// dictionary / map
bus_loads = Bus1:{Load1, Load2}, Bus2:{Load3}, Bus3:{Load4}
我正在使用Java对这个库进行编程。是否有任何绑定机制允许我删除列表中的元素,删除字典条目和相关列表中的相应元素?
例如,如果通过删除总线列表中的Bus1
,我将删除字典中的Bus1:{Load1, Load2}
条目,以及负载列表中的Load1
和Load2
?
直接的解决方案是创建一个方法来删除对象并处理它,但我想知道是否有更有效或直接的方式。
代码示例:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class List_dict_list_binding {
public static void main(String[] args) {
// Create the example
Bus bus1 = new Bus("bus1");
Bus bus2 = new Bus("bus2");
Bus bus3 = new Bus("bus3");
ArrayList<Bus> buses = new ArrayList<>();
buses.add(bus1);
buses.add(bus2);
buses.add(bus3);
Load load1 = new Load("load1");
Load load2 = new Load("load2");
Load load3 = new Load("load3");
Load load4 = new Load("load4");
ArrayList<Load> loads = new ArrayList<>();
loads.add(load1);
loads.add(load2);
loads.add(load3);
loads.add(load4);
Map<Bus, ArrayList<Load>> dict = new HashMap<>();
dict.put(bus1, new ArrayList<>());
dict.put(bus2, new ArrayList<>());
dict.put(bus3, new ArrayList<>());
dict.get(bus1).add(load1);
dict.get(bus1).add(load2);
dict.get(bus2).add(load3);
dict.get(bus3).add(load4);
System.out.println("Original");
System.out.println(buses);
System.out.println(loads);
System.out.println(dict);
// DELETE bus1
buses.remove(bus1);
System.out.println("Deleted bus1");
System.out.println(buses);
System.out.println(loads);
System.out.println(dict);
}
}
class Bus {
public String ID;
Bus(String id) {
ID = id;
}
@Override
public String toString() {
return ID;
}
}
class Load {
public String ID;
Load(String id) {
ID = id;
}
@Override
public String toString() {
return ID;
}
}
输出是这样的:
Original
[bus1, bus2, bus3]
[load1, load2, load3, load4]
{bus3=[load4], bus1=[load1, load2], bus2=[load3]}
Deleted bus1
[bus2, bus3]
[load1, load2, load3, load4]
{bus3=[load4], bus1=[load1, load2], bus2=[load3]}
当您想要级联删除已删除总线的负载时,也是如此。
您可以使用支持的集合,如TreeSet或TreeMap。通过备份集合,集合或映射中的任何更改都将同步。这可以通过使用TreeSet.set():来实现
https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#subSet(E,%20boolean,%20E,%20poolean)
我希望这能有所帮助。