各位前辈,hashmap在做成的时候如果key是数组的话,不是用数组地址去储存的吗?
你随意的拿一个对象取可以取到吗?我试过了,不可以,可能我试错了。
假如你用原来的地址下的对象作为key去取,哪里还有hashmap的优势,不是更加麻烦了吗?
希望高手指点小弟迷津
你随意的拿一个对象取可以取到吗?我试过了,不可以,可能我试错了。
假如你用原来的地址下的对象作为key去取,哪里还有hashmap的优势,不是更加麻烦了吗?
希望高手指点小弟迷津
String[] list1 = new String[]{"1","2","3"};
String[] list1 = new String[]{"4","5","6"};
String[] list1 = new String[]{"7","8","9"}; map1.put(list1, "1");
map1.put(list2, "4");
map1.put(list3, "7");
然后我怎么取出list1 对应的VALUE呢?
下面是取全部的值的做法/////////////////////////////////////////////
Set set = map1.keySet(); //可以得到key的集合
Iterator it = set.iterator();
while(it.hasNext()){
System.out.println(map1.get(it.next()));
}
}
class C
{
public C(String[] list) {this.list = list;}
public boolean equals(Object obj)
{
if(!(obj instanceof String[])) return false;
String[] l = (String[])obj;
if(l.length != list.length) return false;
for(int i=0; i<list.length; ++i)
{
if(l[i] != list[i]) return false;
}
return true;
}
private String[] list;
}这样可以把key换成这个类的对象。String[] list1 = new String[]{"1","2","3"};
String[] list1 = new String[]{"4","5","6"};
String[] list1 = new String[]{"7","8","9"};map1.put(new C(list1), "1");
map1.put(new C(list2), "4");
map1.put(new C(list3), "7");需要的时候
String s = map1.get(new C(list1));
hashCode()
equals() 方法你用String[]作为key不太合适还是用上面兄弟的包装类吧刚刚时我想当然了
不好意思
这个还是用了list1的地址,
需要的时候,我可以
String s = map1.get(new C(new String[] { "1", "2", "3" }));
吗?
我只知道数组的值
我想实现的是,性能问题
我想在数据库中的一个表一次性取出来去避免循环的检索
所以,我把主key作为一个数组,把我业务上需要的值作为value,统统放到hashmap里面
当然,把主key直接拼成一个string也将就可以,但是大家知道,这样是有问题的:
01 + 234 + 5555
012 + 34 + 5555
是一样的,如果把每一个key补足位数,挺麻烦的。
所以想用数组。
import java.util.*;public class Egtest{
public static void main(String[] args){
String[] list = new String[]{"a","b","c"};
System.out.println("list:"+list);
Map map = new HashMap();
map.put(list,"1");
for(Iterator keys = map.keySet().iterator(); keys.hasNext();){
String[] key = (String[])keys.next();
for(int i=0;i<key.length;i++){
System.out.println(""+key[i]);
}
}
}
}
publie int hashCode()
{
int hash = 0;
for(int i=0; i<list.length; ++i)
{
hash += list[i].hasCode();
hash >>= 1;
}
return hash;
}
String[] list1 = new String[] {"1", "2", "3"}; map1.put(new C(list1), "1");
map1.put(list1, "1");
System.out.println(new C(list1).equals(new String[] {"1", "2", "3"})); System.out.println(map1.get(new C(list1)));