java中的列表字典绑定



我正在构建一个库,该库包含对象列表和字典(映射),这些字典将列表中的对象与其他列表中的对象关联起来

即(在伪代码中):

// 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}条目,以及负载列表中的Load1Load2

直接的解决方案是创建一个方法来删除对象并处理它,但我想知道是否有更有效或直接的方式。

代码示例:

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]}
不,没有比这更简单的方法了。即使它在"总线"one_answers"总线加载"中都是相同的总线,每个数据结构都存储一个指向该总线的不同"指针",并且这些"指针"之间没有连接。因此,仅仅删除一个指针是不够的。您还必须自己删除另一个。

当您想要级联删除已删除总线的负载时,也是如此。

您可以使用支持的集合,如TreeSet或TreeMap。通过备份集合,集合或映射中的任何更改都将同步。这可以通过使用TreeSet.set():来实现

https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#subSet(E,%20boolean,%20E,%20poolean)

我希望这能有所帮助。

最新更新