簡體   English   中英

Java:多對一雙向查找

[英]Java: Many-to-one bidirectional lookup

我有多對一關系的數據。 我希望能夠從兩個方向查找數據。 一個例子:

0 : a
1 : b
2 : b
3 : b
4 : c

get(0) --> a
get(1) --> b
get(a) --> 0
get(b) --> (1:3)

這有意義嗎? 可能嗎?

這絕對是可能的。 以下是添加項目的代碼片段:

Map<Integer,String> forwardMap = new HashMap<>();
Map<String,Set<Integer>> reverseMap = new HashMap<>();

void add(Integer x, String y) {
    forwardMap.put(x, y);
    if (!reverseMap.containsKey(y))
        reverseMap.put(y, new HashSet<Integer>());
    reverseMap.get(y).add(x);
}

腳注:Apache Commons有BidiMap,Google Guava有BiMap,但這些似乎是一對一的地圖,不允許問題中提到的多對一案例。

只需使用2個hahsmap。 假設你的“one”是Integer類型,而“many”是String類型以簡化。

HashMap<Integer, String> intToString = new HashMap<>();
HashMap<String, HashSet<Integer>> stringToInt= new HashMap<>();

連接元素的功能:

public void linkElements(Integer i, String s){
  intToString.add(i,s);
  stringToInt.get(s).add(i);
}

獲得價值將是這樣的:

intToString.get(0);    // returns "a"
stringToInt.get("b");  // returns a set {1,2,3}

是的,使用JPA(Java Persistence API),它將使您能夠生成@OneToMany,並且在子級中它將為您提供帶有@ManyToOne的List,基本上它將引用您的專利屬性的屬性。

public class Table1{
    @Id 
    int id ; 
    @OneToMany 
    List<Table2> ls ; 

   // getter and setter ...
}

public class Table2{
        @Id 
        int id ; 
        @ManyToOne 
        Table1 t1 ; 

       // getter and setter ...
    }

希望這對你有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM