各位前辈,hashmap在做成的时候如果key是数组的话,不是用数组地址去储存的吗?
你随意的拿一个对象取可以取到吗?我试过了,不可以,可能我试错了。
假如你用原来的地址下的对象作为key去取,哪里还有hashmap的优势,不是更加麻烦了吗?
希望高手指点小弟迷津

解决方案 »

  1.   

    就是:Map map1 = new 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呢?
      

  2.   

    我做成了一个HashMap,我是不会记得所有key的地址的了,我只会记得key的特征。这样岂不是娶不到?
      

  3.   

    System.out.println(map1.get(list1)); 对
    下面是取全部的值的做法/////////////////////////////////////////////
    Set set = map1.keySet(); //可以得到key的集合
    Iterator it = set.iterator();
    while(it.hasNext()){
     System.out.println(map1.get(it.next()));
    }
      

  4.   

    如果我想取String[]{"4","5","6"}对应的value呢?
      

  5.   

    if(map1.containsKey(new String[]{"4","5","6"})) {     map1.get(new String[]{"4","5","6"}) );
    }
      

  6.   

    楼住可以采用这种方式:
    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));
      

  7.   

    HashMap的key 所属的类要重写
    hashCode()
    equals() 方法你用String[]作为key不太合适还是用上面兄弟的包装类吧刚刚时我想当然了
    不好意思
      

  8.   

    interpb(曾曾胡),对不起,我也没有说明白!
      

  9.   

    Polarislee(北极星)(北京那么大,何处是我家) ,String s = map1.get(new C(list1));
    这个还是用了list1的地址,
    需要的时候,我可以
    String s = map1.get(new C(new String[] { "1", "2", "3" }));
    吗?
    我只知道数组的值
      

  10.   

    我刚刚尝试了,这样还是不能得到可能我的方法有问题。
    我想实现的是,性能问题
    我想在数据库中的一个表一次性取出来去避免循环的检索
    所以,我把主key作为一个数组,把我业务上需要的值作为value,统统放到hashmap里面
    当然,把主key直接拼成一个string也将就可以,但是大家知道,这样是有问题的:
      01  +  234   +    5555
      012 +  34    +    5555
    是一样的,如果把每一个key补足位数,挺麻烦的。
    所以想用数组。
      

  11.   

    package mytest;
    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]);
    }
    }
    }
    }
      

  12.   

    Sorry, 类中应该冲在一个hashCode函数,因为hashMap是通过hashCode作判断的。可以这样写
    publie int hashCode()
    {
       int hash = 0;
       for(int i=0; i<list.length; ++i)
       {
          hash += list[i].hasCode();
          hash >>= 1;
       }
       return hash;
    }
      

  13.   

    Map map1 = new HashMap();
            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)));