2015-06-19 67 views
-2

我基本上是試圖將數據存儲到這種格式和檢索它返回鍵

我要顯示這樣的事情下面

Key    Value 

    B1  --> payerName ----> "wpn", "wpfnb", "dgeft", "xbthy" 


    B2  --> payerName ----> "SSSwpn", "wpfSSSnb", "GGGdgeft", "xbtYYYYhy" 

所以B1有payerName和對於B2,直到現在,我已經創建了一個數據結構,它將payerName與「wpn」,「wpfnb」,「dgeft」,「xbthy」和另一個付款人名稱映射爲「SSSwpn」,「wpfSSSnb」,「GGGdgeft」

到現在爲止,我創建的下面的自定義數據結構反映了映射在付款人名稱與「wpn」,「wpfnb」,「dgeft」,「xbthy」和另一個付款人名稱與「SSSwpn」,「wpfSSSnb」,「GGGdgeft」,「xbtYYYYhy」之間,但現在我想將它們與B1和B2也相應地也

請告訴我們如何修改和附加他們的關鍵,所以最終B1將與付款人名稱進一步與價值「wpn」,「wpfnb」,「dgeft」,「xbthy」和類似的其他情況下B2與payerName相關聯,並且,最後是與值「SSSwpn」相關聯,「wpfSSSnb」,「GGGdgeft」,「xbtYYYYhy」

所以下面是自定義數據結構我已經建立但在此以下數據結構B1 NAD B2是沒有聯繫,所以請告訴我如何修改我的下面的自定義數據結構,我可以聯繫B1和B2也最後

class DictionaryNode 
{ 
    DictionaryNode next[]; 
    String data; 
    DictionaryNode() 
    { 
     next=new DictionaryNode[128]; 
     for(int i=0;i<next.length;i++) 
     { 
      next[i]=null; 
     } 
     data=null; 
    } 
} 

class Dictionary 
{ 
    DictionaryNode root; 
    Dictionary() 
    { 
     root = new DictionaryNode(); 
    } 
    public boolean add(String key,String data) 
    { 
     char[]ch=key.toCharArray(); 
     DictionaryNode current=root; 
     for(int i=0;i<ch.length;i++) 
     { 
      if(current.next[ch[0]]==null) 
      { 
       current.next[ch[0]]=new DictionaryNode(); 
      } 
      current=current.next[ch[0]]; 
     } 
     if(current.data==null) 
     { 
      current.data=data; 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
    public String search(String key) 
    { 
     char[]ch=key.toCharArray(); 
     DictionaryNode current=root; 
     for(int i=0;i<ch.length;i++) 
     { 
      if(current.next[ch[0]]==null) 
      { 
       return null; 
      } 
      else 
      { 
       current=current.next[ch[0]]; 
      } 
     } 
     return current.data; 
    } 
} 

public class main 
{ 
    public static void main(String []args) 
    { 
     Dictionary d=new Dictionary(); 
     d.add("wpn", "AAA"); 
     d.add("wpfnb", "AAA"); 
     d.add("dgeft", "AAA"); 
     d.add("dgeft", "BBB"); 
     d.add("SSSwpn", "AAA"); 
     d.add("wpfSSSnb", "BBB"); 
     d.add("GGGdgeft", "BBB"); 
     d.add("xbtYYYYhy", "BBB"); 
     System.out.println(d.search("wpn")); 
     System.out.println(d.search("SSSwpn")); 


    } 
} 
+0

你的問題困惑 - 你是什麼意思「聯繫B1和B2」?當你從關鍵字B1搜索一個值時,你是否正在編寫這個值,如果它包含相同的值,你還想檢索關鍵字B2? – bphilipnyc

+0

我只想說,當我檢索器B1我應該得到一組相關的值,它是wpn「,」wpfnb「,」dgeft「,」xbthy –

+0

同樣,當我檢索B2我應該得到一組值SSSwpn「, 「wpfSSSnb」,「GGGdgeft」,「xbtYYYYhy」 –

回答

0

您可能想看看java.util.Map接口。該接口的通用實現是HashMap

以下是使用這些工具完成所需工作的一種方法。我將這些值添加到java.util.List,但還有很多其他方法可以做到這一點。

我用@Test註解,因爲我很快用JUnit運行它,但是當你在你的例子你可以把它通過main()方法。

由於任何值都可能與多個關鍵字相關聯,因此您可能希望返回所有具有該值的關鍵字。這是以下第二種方法的作用。

@Test 
public void hashMapExample() { 
    Map payerNames = new HashMap<>(8); //if you're using Java 7 or higher 

    String[] b1Values = {"wpn", "wpfnb","dgeft","xbthy"}; 
    payerNames.put("B1", Arrays.asList(b1Values)); 

    String[] b2Values = {"SSSwpn", "wpfSSSnb", "GGGdgeft", "xbtYYYYhy"}; 
    payerNames.put("B2", Arrays.asList(b2Values)); 

    System.out.println("everything in the map="+payerNames); 

    List b1List = (List)payerNames.get("B1"); 

    System.out.println("just b1 values=" + b1List); 
    System.out.println("all keys with wpn in them=" + getKeysByValue(payerNames, "wpn")); 

} 

private static <T, E> Set<T> getKeysByValue(Map<T, E> map, E value) { 
    Set<T> keys = new HashSet<>(); 
    for (Map.Entry<T, E> entry : map.entrySet()) { 

     List<String> keysList = (List)entry.getValue(); 
     for (String valueWithKey : keysList) { 
      if (Objects.equals(value, valueWithKey)) { 
       keys.add(entry.getKey()); 
      } 
     } 
    } 
    return keys; 
} 

輸出:

everything in the map={B2=[SSSwpn, wpfSSSnb, GGGdgeft, xbtYYYYhy], B1=[wpn, wpfnb, dgeft, xbthy]} 
just b1 values=[wpn, wpfnb, dgeft, xbthy] 
all keys with wpn in them=[B1] 

第二種方法是從該answer由維塔利費德林提供了一種適合。