Java将ArrayList <integer>添加到ArrayList <arraylist <integer>&gt;替换ArrayLists的ArrayList的所有元素</arraylist <integer> </integer>

时间:2013-10-03 14:37:43

标签: java arraylist

我为长标题道歉,如果你能想到更好的标题,请告诉我!

我正在做的是尝试创建ArrayLists的ArrayList并逐个添加ArrayLists。我拥有的两个AL<AL<I>>被称为三角形和方形,我通过addToList()方法添加AL<I>s - 将AL<I>名为temp的AL<AL<I>>添加到相应的AL<AL<I>>s 。 temp似乎没有问题,但是在我运行整个方法figurateNumbers()之后,我的import java.util.ArrayList; import java.util.Iterator; public class problem { public static ArrayList<ArrayList<Integer>> triangle = new ArrayList<ArrayList<Integer>>(); public static ArrayList<ArrayList<Integer>> square = new ArrayList<ArrayList<Integer>>(); public static ArrayList<Integer> temp = new ArrayList<Integer>(); public static void figurateNumbers() //Inserts into individual arraylists, numbers, all figurate numbers square : octagonal { for (int ii = 1; ii < 141; ii++) { if ((ii * ii >= 1000) & (ii * ii < 10000)) addToList(ii * ii , square); if (((ii * ii + ii) / 2 >= 1000) & ((ii * ii + ii) / 2 < 10000)) addToList((ii * ii + ii) / 2 , triangle); } } public static void addToList(int num, ArrayList<ArrayList<Integer>> list) //Splits the two parts of the number and inserts the arraylist into the proper arraylist { temp.clear(); int numInt_one = Integer.parseInt(String.valueOf(num).substring(0,2)); int numInt_two = Integer.parseInt(String.valueOf(num).substring(2,4)); temp.add(numInt_one); temp.add(numInt_two); list.add(temp); } public static void main (String [] args) { figurateNumbers(); System.out.println(triangle.size()); System.out.println(square.size()); Iterator<ArrayList<Integer>> it = square.iterator(); while(it.hasNext()) { ArrayList<Integer> obj = it.next(); System.out.println(obj); } System.out.println(triangle.get(25)); } } 只包含[98,70],即要添加的最后一个临时值。代码如下:

{{1}}

无论是关于手头的问题还是我对这些数据结构的使用,都会非常感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

每次在下面调用时,您都没有创建一个新的临时实例,相同的列表被添加到列表中,您要清除它。记住它是添加的列表的引用。

 public static void addToList(int num, ArrayList<ArrayList<Integer>> list)
    //Splits the two parts of the number and inserts the arraylist into the proper arraylist
    {
      //  temp.clear();// this is the issue do below
        ArrayList<Integer> temp = new ArrayList<Integer>();
        int numInt_one = Integer.parseInt(String.valueOf(num).substring(0,2));  
        int numInt_two = Integer.parseInt(String.valueOf(num).substring(2,4));  
        temp.add(numInt_one);
        temp.add(numInt_two);
        list.add(temp);
    }

答案 1 :(得分:2)

你正在重复使用相同的温度。不要在addToList()中清除()它,创建一个新的(并且为了清晰起见使用局部变量)。

此外,在addToList中,更容易除以100(oops,1000?NO回到100)而不是所有String操作。 e.g。

int numInt_one = num / 100;
int numInt_two = num % 100;

最后一个小建议:在你的figurateNumbers()循环中,你不能在34开始吗?虽然速度增益可能不值得努力,但我的数学家想要这样做。 : - )