Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从树映射中检索HashMap_Java_Hashmap_Treemap - Fatal编程技术网

Java 从树映射中检索HashMap

Java 从树映射中检索HashMap,java,hashmap,treemap,Java,Hashmap,Treemap,我使用以下复杂的数据结构 departures = new TreeMap<String, Map<String, Set<MyObject>>>(); arrivals=new HashMap<String, Set<MyObject>>(); flights=new HashSet<MyObject>(); 我的问题是如何使用这个复杂的数据结构,以及如何从出发地检索到达的航班 System.out.pr

我使用以下复杂的数据结构

departures = new TreeMap<String,  Map<String,  Set<MyObject>>>();
arrivals=new HashMap<String, Set<MyObject>>();
flights=new HashSet<MyObject>(); 
我的问题是如何使用这个复杂的数据结构,以及如何从出发地检索到达的航班

     System.out.println(arrivals.size()); //result 0, arrivals is empty. WHY?
因为当你调用
flights.clear()时到达后
放置(arr,航班)
到达。清除()在<代码>出发后。放置(dep,到达),这将清除原始对象(航班和到达)。请带上您的初始化声明,即

        Map<String, Set<MyObject>> arrivals=new HashMap<String, Set<MyObject>>();
        Set<MyObject>(); flights=new HashSet<MyObject>(); 
您可以对
离店执行相同的操作

现在进行检索:

                if(!flights.isEmpty()){
                   Set<MyObject> newflights=new HashSet<MyObject>(); 
                    newflights.addAll(flights); //copy elements to new set
                   arrivals.put(arr, newflights);
                    flights.clear();
                }
      Set<String> arrivalKeys = departures.keySet();
      Interator<String> arrIter = arrivalKeys.iterator();
      while(arrIter.hasNext()){
        String arrKey = arrIter.next();
        Map<String, Set<MyObject>> arrivals = departures.get(arrKey );
        //use your arrivals map object
      }
arrivals=newhashmap();
离开=新树映射();
用于(字符串dep:nizDep){
用于(字符串arr:nizArr){
对于(MyObject航班:_航班){
if(flight.getFrom().equalsIgnoreCase(dep)和&flight.getTo().equalsIgnoreCase(arr)){
flights=newhashset();
航班。添加(航班);
到达。put(arr,航班);
离港。put(dep,抵达);
}
}
}
}
System.out.println(偏差.size())//结果14
if(离港集装箱(“马德里”)){
到达=离开。获取(“马德里”);
System.out.println(arrivals.size());
}

如果您希望在到达和航班之间保持一对一的映射,那么这段代码可以工作。如果您想保留一个维护航班集的全局结构,那么您必须创建另一个全局gflights对象,并将每个航班对象放入其中。

为什么不为这个“复杂结构”创建类?如果你这样做了,它会让它更容易理解…因为这是一个更大的项目的一部分,我需要完成,还有一些我不想更改的代码(例如这个数据结构)。for loop而不是使用迭代器会不会让代码更不冗长和简单?
      Set<String> arrivalKeys = departures.keySet();
      Interator<String> arrIter = arrivalKeys.iterator();
      while(arrIter.hasNext()){
        String arrKey = arrIter.next();
        Map<String, Set<MyObject>> arrivals = departures.get(arrKey );
        //use your arrivals map object
      }
      Set<String> flightKeys = arrivals.keySet();
      Interator<String> flIter = flightKeys.iterator();
      while(flIter.hasNext()){
        String flKey = flIter.next();
        Set<MyObject> flights = arrivals.get(flKey );
        //use your flights set object
      }
arrivals=new HashMap<String, Set<MyObject>>();
departures = new TreeMap<String,  Map<String,  Set<MyObject>>>();
for(String dep: nizDep){
    for(String arr: nizArr){
      for(MyObject flight: _flights){
        if(flight.getFrom().equalsIgnoreCase(dep)&&flight.getTo().equalsIgnoreCase(arr)){
            flights=new HashSet<MyObject>(); 
            flights.add(flight);        
            arrivals.put(arr, flights);     
            departures.put(dep, arrivals);
         }
      }
   }
}
System.out.println(departures.size()); //result 14
if(departures.containsKey("Madrid")) {
    arrivals=departures.get("Madrid");
    System.out.println(arrivals.size());
}