java中如何在map中实现一对多的关系?
假设这样定义:
Map coll=new HashMap();
coll.put(1,"a");
coll.put(1,"b");
比如说1代表学校,a和b分别代表学院,即一个学校可对应多个学院。
1、可以使用Map格式来达到一对多的关系
2、key值可以为一个整型数,作为一个类似ID主键来使用,value值可以用List集合来保存多条数据。
3、这样就达到了一个key,对应多条记录。
不能,
但是可以实现同样的效果
比如,多个值先存入list中,然后这个list作为值存入对应的key中
这样通过map的key可以获得list,然后这个list就有多个值了,取出来用就可以了
2、key值可以为一个整型数,作为一个类似ID主键来使用,value值可以用List集合来保存多条数据
3、这样就达到了一个key,对应多条记录。
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();
}
}
希望能帮助到你
你的就把一个学校作为一个集合对象,集合对象里面可以放多个院校。。
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");
ava什么时候出来的?
大陆版《战地之王》目前经历过的测试阶段如下: 2008年12月06日 - 2008年12月28日:“百人技测” ,游戏未开放客户端,仅为内部测试,包括资格在内所有资料不保留。 2008年12月30日-2009年01月06日:“加冕封测” ,游戏正式发布客户端,但是只有激活封测的玩家才能下载。 2009年01月08日-...
AVA的黄魂AK47和鸿福M4A1哪个好
所以在稳定性可以的情况下,枪威力越大越好,如果瞄头能力强,黄魂几乎是秒杀。如果控枪能力很好,那我推荐用GP的AK74M,把加稳定的零件全加上,在加个钢丝强化枪管,那就是无敌神器,因为74比47射程远(其实在AVA里射程很重要,几乎相当于威力),射速快。(你是不是在弄改QQ签名的活动啊)...
我的配置能玩ava吗?
cpu双核 够了 内存 1024 够了 显卡512MB够了 只不过显卡相对弱一些 你也可以进ava官网测试一下
在光滑水平面上叠放A、B两物体,质量分别为mA、mB,A与B间动摩擦因数为u...
以质量为m的小球和A为系统,撞击过程动量守恒 mv=mAvA-mv\/5 vA=6mv\/5mA 以A、B为系统当二者速度相等时VA=VB=V',相对位移x最大 由动量守恒得 6mv\/5=(mA+mB)v'v'=6mv\/5(mA+mB)板B的最小长度x 由能量守恒得 1\/2mAvA^2=1\/2(mA+mB)v'^2+umAgx x=18mBm^2v^2\/25ug(mA+mB...
WaT HAVARAVA罗马歌词
HavaRava 作词: WaT 作曲: WaT あてもないまま失くした恋の カケラ海に投げ舍てて やがて过ぎゆく季节のように 思い出になればいいのに 弾ける波しぶきと太阳 オトコふたり负け组同士 恋人たちで溢れる砂浜 仆ら微妙に浮いてるかも Oh Yeah 落ち込んでばかりじゃ Oh Yeah イケナ...
高中物理这个碰撞式子用法
适用于物体完全弹性碰撞。当2个不同速度,不同质量的物体,其中一个物体速度为0,可以表述为 MaV=MaVa+MbVb 1\/2MaV平方=1\/2MaVa平方+1\/2MbVb平方 Va=(Ma-Mb)\/(Ma+mb)*V Vb=2Mb\/(Ma+mb)*V
高二物理动量问题 关于机械能守恒
②当A与B碰撞时,设碰撞后两物体的速度为v,根据动量守恒定律有 mAVA=(mA+mB)v共 1\/2(mA+mB)v共^2=(mA+mB)gh h=0.45m 不能用1\/2mAvA^2=1\/2(mA+mB)v共^2+(mA+mB)gh 的原因 在AB完全非弹性碰撞过程中,损失机械能,转化为系统能能 1\/2mAvA^2=1\/2(mA+mB)v共^2+...
A B两物体动量相等,而Ma<Mb,则两物体动能是 A:Ea<Eb B:Ea>Eb C:Ea=...
【B】Pa=Pb MaVa=MbVb 因为Ma小于Mb 所以Va大于Vb 又因为E=1\/2 MV^2 所以Ea=1\/2MaVa^2大于Eb 所以,应该选择【B】不明白欢迎来追问!望采纳,多谢了!
如图所示,质量分别为mA=0.4kg和mB=0.6kg的可视为质点的A、B两物体,放 ...
mAvA′+(mB+mC)vB′=(mA+mB+mC)v代入数据解得v=1.95m\/s.根据能量守恒知,μ AmAgs相对=12mAvA′2+12(mB+mC)vB′2?12(mA+mB+mC)v2代入数据解得,s相对=0.3125m=31.25cm>15cm,知A能从小车上滑下.答:(1)经过0.5s时间A、B两物体在车上相碰.(2)...
A、B两木块质量分别为ma、mb且2ma=mb,两者用一轻弹簧连接后静止于光滑水...
解答:以Ma、Mb及弹簧为研究对象,系统所受合外力为零,动量守恒MaVa+MbVb=0 分量式为MaVa-MbVb=0 所以Va\/Vb=Mb\/Ma=2 所以Eka\/Ekb=MaV²a\/MbV²b=Ma\/Mb(Va\/Vb)²=1\/2×2²=2
夹砌断血: 1、可以使用Map格式来达到一对多的关系2、key值可以为一个整型数,作为一个类似ID主键来使用,value值可以用List集合来保存多条数据3、这样就达到了一个key,对应多条记录.
广平县19670577211: java中如何在map中实现一对多的关系? - ?
夹砌断血: //楼主以下方法可以 Map coll = new HashMap();List list = new ArrayList();list.add("a...
广平县19670577211: java如何实现一对多的联系 - ?
夹砌断血: 1.数据库>>1的实例作为主键表, N的实例作为外键表引用1的实例主键表示他们的关系 2. JavaBean>>a.主键表实例类, 基本属性即可, 如果需要从主键bean中找到外键bean, 需要在主键bean中声明泛型集合保存 b.外键表实例类 1). ...
广平县19670577211: JAVA 中map和List实现一个键对应多个值 - ?
夹砌断血: List<String> list=new ArrayList<String>(); Map<String,List<String>> map=new HashMap<String>(); for(int i=0;i<10<i++){for(int j=0;j<10;j++){list.add(i+"个例子:"+j);}map.put(i+"",list); }
广平县19670577211: 请java高手帮忙!!! - ?
夹砌断血: MAP就是一个映射,你把年纪和班级映射一个map\r\n班级和班主任映射一个map\r\n然后把他们...
广平县19670577211: java中map有哪几种实现方式,并且比较异同 - ?
夹砌断血: Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射.对于键对象来说,像Set 一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对...
广平县19670577211: java中key - value数据有重复KEY如何存储 - ?
夹砌断血: //使用ArrayList实现一个Key对应一个ArrayList实现一对多 public static void putAdd(String sr,String[] s){ if(!m.containsKey(sr)){ m.put(sr, new ArrayList()); } for(int i=0;i m.get(sr).add(s[i]); } }存入之前先判断,然后再存储
广平县19670577211: java中map集合能不能存另两个集合 - ?
夹砌断血: java中map集合能放另外两个集合,主要是使用map的putall集合,加入另一个集合,如下代码:import java.util.HashMap; import java.util.Map; public class ceshi { public static void main(String[] args) { Map map1 = new HashMap(); map1.put("key1...
广平县19670577211: JAVA如何随机取出Map中的一对键和值? - ?
夹砌断血: 举个例子: Map<Integer, String> map = new HashMap<Integer, String>(); 先拿所有的键: Integer[] keys = map.keySet().toArray(new Integer[0]); 然后随机一个键,找出该值: Random random = new Random(); Integer randomKey = keys[...
广平县19670577211: Java怎样创建两个KEY的MAP - ?
夹砌断血: 就像在XY坐标系中,一个X刻度、一个Y刻度,会对应图上的一个点,即pair(x, y) – > point,那么就有创建一个点,或者根据(x, y)来寻求一个点的需求,如果用Python的语法表达,是这个样子: Python中表达pair KEY映射MAP的方法Python...