java map表里,key值能否映射到多个Value?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java map表里,key值能否映射到多个Value?相关的知识,希望对你有一定的参考价值。
参考技术Amap中的key和value是一一对应的,但是这里的value可以是一个集合,里面可能包含很多值,这样可以实现。使用时,要循环来访问。
Map的可以唯一无序,value无序且不唯一,所以不同的key会有相同的value,但是他的对内存中还是存储着多个相同的value,这是因为在存到里面的时候是根据hash码存的,hash是唯一的。
扩展资料:
注:将可变对象用作映射键时必须格外小心。当对象是映射中某个键时,如果以影响 equals比较的方式更改了对象的值,则映射的行为将是不确定的。此项禁止的一种特殊情况是不允许某个映射将自身作为一个键包含。虽然允许某个映射将自身作为值包含,但请格外小心:在这样的映射上 equals 和 hashCode方法的定义将不再是明确的。
参考资料来源:百度百科-Map
JAVA里map的key值和value值怎么放到SQL文里作条件
我现在Map t = new HashMap();
String[] a = new String[31]();
String[] b = new String[31]();
for(int j=0 , int k =0 ; j<31 ; j++ , k++)
t.put( "a[j]", b[k]);
大概意思是这样,a和b在表里有分别对应的字段,假设a在表里的数据是从1到31,现在这个t的key值也是从1到31,b也是不同的。我现在想做的SQL文内容大概是
update 表A
set A = a[i]
WHERE
B = b[i]
我就是想把map里的key值当作判定条件,然后分别把value值更新到表里的对应数据上。但是在SQL里写的时候,后面a和b应该是个数组,这样的话,怎么写到SQL文里呢?在线等大神帮忙!!
你a[i],b[i]都对应了,为啥还要先放在MAP然后再从MAP里取出来呢。
Map<String,String> t = new HashMap<String,String>();String[] a = new String[31];
String[] b = new String[31];
for (int j = 0, k = 0; j < 31; j++, k++)
t.put(a[j], b[k]);
Set<String> set = new HashSet<String>();
set = t.keySet();
Connection conn = DBUtil.getConnection();
for (String key : set)
String sql = "update xx_table set xxx=? where yyy=? ";
PreparedStatement prep = conn.prepareStatement(sql);
prep.setString(1, key);
prep.setString(2, t.get(key));
prep.executeUpdate();
用MAP就这样的意思?
参考技术B 个人觉得你a,b都是字符串类型的数组,你就直接放在2个map中不行吗?或者把a,b存在对应关系的一对数据拼接成一个字符串在放入map中,方便取值。取得字符串在分割开来就可以了 参考技术C Map at = new HashMap();
Map bt = new HashMap();
String[] a = new String[31]();
String[] b = new String[31]();
for(int j=0 , int k =1 ; j<31 ; j++ , k++)
at[j] = k;
bt[j] = k;
bt.put( "a["+j+"]", at[j]);
bt.put( "b["+j+"]", bt[j]);
for(int i=0 ; i<31 ; i++)
a[i] = t.get( "a["+i+"]");
b[i] = t.get( "b["+i+"]");
sql = update 表A set A = a[i] WHERE B = b[i]
附注:按照你的要求是这么写的,其实map就没必要搞,你需要优化代码的思路追问
不好意思可能提问的有点问题,是这样,现在我通过别的方法取到了一个map,t.map(key[i],value);这里的key是个数组,我能得到,value的值是不知道的。
SQL大概是
update 表A
set
VALUE = /*value*/
where
KEY = /*key*/,
我现在想通过循环把每一条的key 和value取出来放到SQL文里。就是这样。。。上午我也没明白,所以提问的有些模糊。
哦,还是不太明白你的需求,你看是不是这样嘛:
Map t = new HashMap();
//map的key会形成这样的一个数组 :
String[] key = 1,2,3,4,5,6,……31;
//map的value可以通过key来访问,形成这样的一个数组:
//Object[] value = key0,key[1],……,key30;
//如果是这样的话,就可以这样处理了:
for(int i=0 , i<key.length ;i++)
sql = "update 表A set VALUE=" + map.get(key[i]) +" WHERE KEY=" + key[i];
另外,java中map的key只能是一个字符串,不会是别的,所以map的key不会是数组形式,只是map中有很多个key按照顺序排列,看起来像数组而已。
不知道你的sql不能一条一条修改吗? 如果非要用数组,哪自己根据ketSet自己组合这样的数组。追问
现在要求是只调用这一个SQL,而且里面的判定条件或者set条件是数组里的值,现在假如说有一个数组a[4],里面有 1 2 3 4 5 这5个对象,怎么写个SQL文能把这5个对象分别赋到5个数据里?
UPDATE 表A
SET A = ??
WHERE
1=1
像这样,??地方应该怎么写
你的意思 就是写一句sql 同时更改 这 5条记录???
UPDATE TABLE SET A = A[1],A[2],A[3] WHERE B= B[1],B[2],B[3];???? 这样的 这个意思吗??
这个明显不可能实现的,你从数据库的角度上去想一想?
你能用一个条件查出需要更新的记录,但是如何让对应的记录知道他要被改成多少呢?
只有唯一确定一条记录时,才能明确知道改那条,该那个字段,改成什么内容。
从数据库方面想,更新只能是更改一条或一批,但改的结果(修改的内容)肯定是相同的,不可能那么智能的知道那个条件的改成对应的,你这样的需求只能一条一条改。
以上是关于java map表里,key值能否映射到多个Value?的主要内容,如果未能解决你的问题,请参考以下文章
JAVA里map的key值和value值怎么放到SQL文里作条件
java中,map集合里面,一个key对应value可以,一个key对应多个value也行,但是多个key可以对应同一个value