如何以巧妙的方式从两个堆栈创建对

时间:2014-09-06 13:49:22

标签: java

我有两个堆栈; Stack<String> fileStack<String[]>author。他们有一对一的关系,即

file            author

file1        author3, author2    // file1 is written by author3 and author2
file2        author1, author2    // file2 is written by author1 and author2

我试图创建新的数据结构(我尽管Map最好)以包含对中的所有信息。例如;

new data structure

author1, file2
author2, file1, file2
author3, file1

要创建这一对,我使用了HashMap<String, Set<String> allInfo,并将连接实现为;

int len = author.size();

   for(int i = 0 ; i <len ; i ++ ){
      String []temp = author.pop(); 
      int len2 = temp.length();

      for(int j = 0 ; j <len2 ; j ++ ){
          if(allInfo.contains(temp[j]) == false){
                Set<String> list = new HashSet<String>();
                allInfo.put(temp[j], list);
          }

          Set<String> temp2 = allInfo.get(temp[j]);
          temp2.add(file.pop());
      }
   }

然而,看起来这个实现是如此丑陋。如何更巧妙地创建这对? (依赖于Java的内置方法是首选。)

2 个答案:

答案 0 :(得分:2)

下面的代码只是更好一点。周围有(非JDK)库提供了一个名为multimap的数据结构,这样更方便。但是你仍然坚持使用两个堆栈,以及关联的反向排序,所以你需要一些编码工作。

while( ! author.empty() ){
  String f = file.pop();   // Note that in your code this is in the wrong place
  for( String aut: author.pop() ){
    Set<String> files = allInfo.get( aut );
    if( files == null ){
      files = new HashSet<>();
      allInfo.put( aut, files );
    }
    files.add( f );
  }
}

答案 1 :(得分:0)

如何为您的问题设置自定义类型?

public class AuthorPublication{

private String authorName;

private Set<String> files;

//setters and getters

}