2016-03-04 63 views
0

我有一個方法需要一個字符串數組。我的問題是與 輸出:從行打印setOfArray我得到以下 輸出這是正確的arrayJava設置 - 全部刪除

(buy,pay,sell): [sell, pay] [sell] 
[] [buy, sell] [buy] [buy, pay] 

然而,這並不轉移到mapOfPermissions

我的輸出是:

{buy:pay:sell:=[buy, sell, pay], 
pay:=[buy, sell, pay], pay:sell:=[buy, sell, pay], buy:=[buy, sell, 
pay] . . . . } 

任何想法如何,我可以解決這一問題?

public Map build (String[] array){ 
    setOfArray = new HashSet<String>(); 

    for (String a : array){ 
     setOfArray.add(a); 
    } 

    Arrays.sort(array); 
    int n = array.length; 
    String current = ""; 

    int i = 0; 

    while (i<n) { 

     for (int j = i ; j<n ; j++){  

      current = current + (array[j] + ":"); 
      woSeed = new HashSet<String>(); 
      StringTokenizer stringtokenizer = new StringTokenizer(current, ":"); 
      while (stringtokenizer.hasMoreElements()) { 

       woSeed.add(stringtokenizer.nextToken()); 

      } 

      setOfArray.removeAll(woSeed); 

      System.out.println(setOfArray); 
      mapOfPermissions.put(current,setOfArray); 

      for (String a : array){ 

       setOfArray.add(a); 
      }  
     } 
     current = ""; 
     i++;    
    } 
    return mapOfPermissions; 
} 

感謝

+0

對'build'方法的輸入以及期望的輸出是什麼? –

+0

輸入:購買,支付,出售 – Vickie

+0

輸出:購買:支付:賣出:= [],支付:賣出= [買]等基本上,該集應包含除名稱中的值外的所有內容。希望有道理 – Vickie

回答

1

問題是與以下行:

mapOfPermissions.put(current,setOfArray);

基本上,我們正在把這些值在地圖上,但是,我們仍然有參考(即setOfArray ),因此,當我們使用該引用的元素add/remove時,地圖中的值得到更改。解決的辦法是使用以下行:

mapOfPermissions.put(current,new HashSet<String>(setOfArray));

這使集的副本到地圖,因此,在該組進一步的變化不影響該映射值。

+0

謝謝,完美的作品:) – Vickie