java中如何在map中实现一对多的关系?

假设我这样定义:Mapcoll=newHashMap();coll.put(1,"a");coll.put(1,"b");比如说1代表学校,a和b分别代表学院,即一个学校... 假设我这样定义:
Map coll=new HashMap();
coll.put(1,"a");
coll.put(1,"b");
比如说1代表学校,a和b分别代表学院,即一个学校可对应多个学院。
请问我该如何取出a和b呢?
谢谢大家。
请问可否为我详细写出用另一种方法实现的代码呢?
展开
 我来答
Cansluck
2015-12-07 · 知道合伙人软件行家
Cansluck
知道合伙人软件行家
采纳数:502 获赞数:1407
毕业于湖南农业大学计算机科学与技术专业,学士学位。从事java开发4年,读过大量的java开发的书籍

向TA提问 私信TA
展开全部
1、可以使用Map<Integer, List>格式来达到一对多的关系
2、key值可以为一个整型数,作为一个类似ID主键来使用,value值可以用List集合来保存多条数据
3、这样就达到了一个key,对应多条记录。
百度网友22da862
2010-08-13 · TA获得超过124个赞
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:80.9万
展开全部
map里存放的是键值对,键不可以重复 所以不能想里所说的那样实现一对多的关系,一对多关系主要体现在数据库里,通过主键或外键的组合来实现。你在程序里用map实现,好像没多大意义,如果真想实现这样的一对多关系可以这样 map 里面的值放一个集合 集合里面放各个学院。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
拆迁办刘队长
2010-08-13
知道答主
回答量:13
采纳率:0%
帮助的人:0
展开全部
可以实现,不过要自定义一个高级HashMap,它的效率是高出list很多。

下面是我以前写的一个sampler,试试看:(它不但可以操作基本数据类型,一般的对象也能,只要重写其hashcode和equals方法)

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

class Test {

public static void main(String[] args) {

Map<Object, Object> map = new fuzzyMap(new HashMap()) {

@Override
public Collection instanciateNewCollection() {
return new ArrayList<Object>(3);
}

};

O o = new O("a1", "b1");
map.put(o, o);

O o2 = new O("a1", "b2");
map.put(o2, o2);

System.out.println(o.equals(o2));

o = new O("a3", "b3");
map.put(o, o);

o = new O("a4", "b4");
map.put(o, o);

Object o_return = map.get(o2);

if (o_return instanceof List) {
List<O> localList = (List<O>) o_return;

for (O o_ret : localList) {
System.out.println(o_ret.a + "===" + o_ret.b);
}
} else {
O o_ret = (O) o_return;
System.out.println(o_ret.a);
}

}
}

class O {

public String a = "";

public String b = "";

public boolean hashCodeDirty = true;

private int hashCode = 1;

public O(String str1, String str2) {
a = str1;
b = str2;
}

@Override
public int hashCode() {
if (this.hashCodeDirty) {
final int prime = 5;
int result = 1;

result = prime * result + ((this.a == null) ? 0 : this.a.hashCode());

this.hashCode = result;
this.hashCodeDirty = false;
}
return this.hashCode;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final O other = (O) obj;

if (this.b == null) {
if (other.a != null)
return false;
} else if (!this.a.equals(other.a))
return false;

return true;
}
}

abstract class fuzzyMap implements Map {

private Map map;

public fuzzyMap(Map map) {
super();
this.map = map;
}

public int size() {
return map.size();
}

public boolean isEmpty() {
return map.isEmpty();
}

public boolean containsKey(Object key) {
return map.containsKey(key);
}

public boolean containsValue(Object value) {
return map.containsValue(value);
}

public Object get(Object key) {
return map.get(key);
}

public Object put(Object key, Object value) {
Object v = map.get(key);
if (v != null) {
if (v instanceof List) {
((List) v).add(value);
} else {
Collection list = instanciateNewCollection();
list.add(v);
list.add(value);
map.put(key, list);
}
} else {
return map.put(key, value);
}
return v;
}

public abstract Collection instanciateNewCollection();

public Object removeValue(Object key, Object value) {
Object v = map.get(key);
if (v != null) {
if (v instanceof List) {
((List) v).remove(value);
return value;
} else if (value.equals(v)) {
remove(key);
return value;
}
return null;
}
return null;
}

public Object remove(Object key) {
return map.remove(key);
}

public void putAll(Map t) {
map.putAll(t);
}

public void clear() {
map.clear();
}

public Set keySet() {
return map.keySet();
}

public Collection values() {
return map.values();
}

public Set<java.util.Map.Entry> entrySet() {
return map.entrySet();
}
}

希望能帮助到你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhouzuorong
2010-08-13 · 超过22用户采纳过TA的回答
知道答主
回答量:93
采纳率:0%
帮助的人:43.4万
展开全部
你的就把一个学校作为一个集合对象,集合对象里面可以放多个院校。。
Map里面的key 就是你的学校,Value就只它对应的院校的集合对象。。

Map<String,List<T>> hashMap =new HashMap<String,List<T>>
List<T> list = new List<T>
hashMap.put("1",list)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bd周述兵
2010-08-13 · TA获得超过350个赞
知道答主
回答量:135
采纳率:0%
帮助的人:0
展开全部
//楼主以下方法可以
Map<String,List> coll = new HashMap<String,List>();
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
coll.put("1",list);
List<String> results = (List<String>)coll.get("1");
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(9)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式