如果我們有學生和課程實體,並且它們之間的關係是多對多的,即學生可以採取許多課程,許多學生可以採取課程。如果我們必須表達這種關係,那麼我們可以通過哪種最佳數據結構來表示這種關係。如果我們將hashmap和student一起用作關鍵和學生作爲價值的課程列表,那麼我們需要另一個hashmap,通過它我們可以表示課程與學生的關係。有沒有什麼最好的方式來表達這種關係,以便搜索速度很快。代表多對多關係的數據結構
7
A
回答
1
的雙向圖表可用於實現多到多的關係,其中每個節點可以連接到許多其它節點
0
我認爲這是適合使用的數據結構的組合。這裏是一個小例子:
public class ManyToManyMap<S, C> {
private Map<S, Set<C>> firstToSecondMap = new HashMap<>();
private Map<C, Set<S>> secondToFirstMap = new HashMap<>();
public void put(S first, C second) {
if (!firstToSecondMap.containsKey(first)) {
firstToSecondMap.put(first, new HashSet<>());
}
firstToSecondMap.get(first).add(second);
if (!secondToFirstMap.containsKey(second)) {
secondToFirstMap.put(second, new HashSet<>());
}
secondToFirstMap.get(second).add(first);
}
public Set<C> getFirst(S first) {
return firstToSecondMap.get(first);
}
public Set<S> getSecond(C second) {
return secondToFirstMap.get(second);
}
public Set<C> removeByFirst(S first) {
Set<C> itemsToRemove = firstToSecondMap.remove(first);
for (C item : itemsToRemove) {
secondToFirstMap.get(item).remove(first);
}
return itemsToRemove;
}
public Set<S> removeBySecond(C second) {
Set<S> itemsToRemove = secondToFirstMap.remove(second);
for (S item : itemsToRemove) {
firstToSecondMap.get(item).remove(second);
}
return itemsToRemove;
}
}
而且這裏有一個例子用法:
ManyToManyMap<String, String> mmMap = new ManyToManyMap<>();
mmMap.put("Tom", "Math");
mmMap.put("Tom", "Java");
mmMap.put("Tom", "Java");
mmMap.put("Mary", "Java");
Set<String> coursesByStudent = mmMap.getFirst("Tom"); // Java, Math
Set<String> studentByCourse = mmMap.getSecond("Java"); // Tom, Mary
mmMap.removeByFirst("Tom");
studentByCourse = mmMap.getSecond("Java"); // Mary
的
相關問題
- 1. 應用於多對多關係的數據庫結構?
- 2. mySql一對多關係表結構
- 3. Mysql多表關係結構
- 4. stackmob 1對多關係體系結構
- 5. 代表sqlite中的多對多關係
- 6. 替代使用關係數據庫中簡單數據的多對多關係
- 7. iOS - 核心數據關係。映射表/多對多關係
- 8. 一對多數據庫表的關係
- 9. 多對多的關係表
- 10. 檢索多對多的關係數據
- 11. 這種多對多的數據庫結構會有什麼樣的關係?
- 12. Python中的多對多數據結構
- 13. 關係數據庫一對多關係
- 14. 應該將多對多的數據關係視爲多對多關係嗎?
- 15. 數據庫重構爲多對多的關係
- 16. 一個多對多關係的數據結構(人朋友問題)
- 17. 多對多表關係
- 18. MySQL - 多對多關係 - 表
- 19. MySQL多對多關係表
- 20. SQL多對多表關係
- 21. 如何構建多對多的關係
- 22. 與關係的其他數據的多對多關係
- 23. 數據庫多對多關係
- 24. 多對多關係數據庫設計
- 25. Rails - 多對多關係 - 數據問題?
- 26. 核心數據多對多關係NSPredicate
- 27. 數據庫關係 - 多對多
- 28. Ember數據 - 多對多關係?
- 29. 核心數據多對多關係
- 30. 核心數據多對多關係
可能重複[Java的多對多關聯圖](http://stackoverflow.com/questions/2571652/ java-many-to-many-association-map),[模型結構在多對多關係中](http://stackoverflow.com/questions/14219954/model-structure-in-many-to-many-relationship) – rid
http://stackoverflow.com/questions/473862/is-there-a-many-to-many-collection-in-java-using-generics-domain-model-not-per – assylias
樹是你在這裏需要的 –