本意:在map中存入对象RandomInt,对象只有一个属性int[].
出现错误:打印map时,values
全为最后一条记录的values.package com.test;import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class Test {
public static void main(String[] args) {
Map<Integer, RandomInt> map = new HashMap<Integer, RandomInt>();
Map<Integer, Integer> map2 = new HashMap<Integer, Integer>();
List<RandomInt> list=new ArrayList<RandomInt>();
int id = 0;
int[] a = new int[2];
for (int m = 1; m <4; m++) {
a[0] = m;
for (int n = m + 2; n <6; n++) {
a[1] = n;
RandomInt cc=new RandomInt(a);
map.put(id++, cc);
map2.put(id++, a[1]+a[0]);
list.add(cc);
}
}
System.out.println(map);//打印结果
System.out.println(map2);//结果无问题
System.out.println(list);//
System.out.println("***********");
}
}class RandomInt {
private int[] in; public RandomInt() { } public RandomInt(int[] in) {
this.in = in;
} public int[] getIn() {
return in;
} public void setIn(int[] in) {
this.in = in;
} @Override
public String toString() {
return "RandomInt [in=" + Arrays.toString(in) + "]";
}}

解决方案 »

  1.   

    for (int m = 1; m <4; m++) {
                List<RandomInt> list=new ArrayList<RandomInt>();
                a[0] = m;
                for (int n = m + 2; n <6; n++) {
                    a[1] = n;
                    RandomInt cc=new RandomInt(a);
                    map.put(id++, cc);
                    map2.put(id++, a[1]+a[0]);
                    list.add(cc);    
                }
            }
    list 要new 新的。 对象引用问题。
      

  2.   


    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;public class Cat {
        public static void main(String[] args) {
            Map<Integer, RandomInt> map = new HashMap<Integer, RandomInt>();
            Map<Integer, Integer> map2 = new HashMap<Integer, Integer>();
            List<RandomInt> list = null;
            list = new ArrayList<RandomInt>();
            int id = 0;
            for (int m = 1; m <4; m++) {
            
                for (int n = m + 2; n <6; n++){
                 int[] a = new int[2];//这里对象引用问题。
                 a[0] = m; a[1] = n;
                    RandomInt cc=new RandomInt(a);
                    map.put(id++, cc);
                    map2.put(id, a[0]+a[1]);
                    list.add(cc);    
                }
            }
            System.out.println(map);//打印结果
            System.out.println(map2);//结果无问题
    //        System.out.println(list);//
            System.out.println("***********");
        }
    }class RandomInt {
        private int[] in;    public RandomInt() {    }    public RandomInt(int[] in) {
            this.in = in;
        }    public int[] getIn() {
            return in;
        }    public void setIn(int[] in) {
            this.in = in;
        }    @Override
        public String toString() {
            return "RandomInt [in=" + Arrays.toString(in) + "]";
        }}
      

  3.   

    list要new新的,那map可以吗?已经是新new的;
    如果是因为没有new新的对象 ,那集合中的记录怎么还是在增加?list map map2中的记录不是一个.
      

  4.   

    HashMap 里面的value 是一个对象的引用,对HashMap里的对象的任何一次改动都是对同一个对象的改动,虽然你每次都new 了一个新的RandomInt的对象,放到HashMap里,但是你的RandomInt这个类里面有一个int[]对象的引用 in,这个引用一直没变,所以无论你怎么改变实际上都对同一个int[]对象的改动,所以最后的结果都相同,给你看一个例子就会明白package a;import java.util.*;public class HashMapAdd {
    public static void main(String[] args) {
    HashMap<String, Object> hm = new HashMap<String, Object>();
    StringBuffer sb = new StringBuffer();
    sb.append("abc,");
    hm.put("1", sb);
    sb.append("def,");
    hm.put("2", sb);
    sb.append("mno,");
    hm.put("3", sb);
    sb.append("xyz.");
    hm.put("4", sb);
    int numObj = 0;
    Set<String> key = hm.keySet();
    for (Iterator it = key.iterator(); it.hasNext();) {
    String s = (String) it.next();
    System.out.print("get StringBufffer " + (++numObj)
    + " from Hashtable: ");
    System.out.println(hm.get(s));
    }
    }
    }上边这段代码的正确的输出结果:get StringBufffer 1 from Hashtable: abc,def,mno,xyz.
    get StringBufffer 2 from Hashtable: abc,def,mno,xyz.
    get StringBufffer 3 from Hashtable: abc,def,mno,xyz.
    get StringBufffer 4 from Hashtable: abc,def,mno,xyz.而并不是这样的结果:get StringBufffer 1 from Hashtable: abc,
    get StringBufffer 2 from Hashtable: abc,def,
    get StringBufffer 3 from Hashtable: abc,def,mno,
    get StringBufffer 4 from Hashtable: abc,def,mno,xyz.