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呢?
谢谢大家。
请问可否为我详细写出用另一种方法实现的代码呢? 展开
Map coll=new HashMap();
coll.put(1,"a");
coll.put(1,"b");
比如说1代表学校,a和b分别代表学院,即一个学校可对应多个学院。
请问我该如何取出a和b呢?
谢谢大家。
请问可否为我详细写出用另一种方法实现的代码呢? 展开
11个回答
展开全部
map里存放的是键值对,键不可以重复 所以不能想里所说的那样实现一对多的关系,一对多关系主要体现在数据库里,通过主键或外键的组合来实现。你在程序里用map实现,好像没多大意义,如果真想实现这样的一对多关系可以这样 map 里面的值放一个集合 集合里面放各个学院。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以实现,不过要自定义一个高级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();
}
}
希望能帮助到你
下面是我以前写的一个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();
}
}
希望能帮助到你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的就把一个学校作为一个集合对象,集合对象里面可以放多个院校。。
Map里面的key 就是你的学校,Value就只它对应的院校的集合对象。。
Map<String,List<T>> hashMap =new HashMap<String,List<T>>
List<T> list = new List<T>
hashMap.put("1",list)
Map里面的key 就是你的学校,Value就只它对应的院校的集合对象。。
Map<String,List<T>> hashMap =new HashMap<String,List<T>>
List<T> list = new List<T>
hashMap.put("1",list)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//楼主以下方法可以
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");
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");
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询