制作数组列表的副本,而不进行循环

时间:2013-03-22 18:05:28

标签: java arrays

我有一个使用继承的数组我认为基本上有一个数组可以容纳食物和饮料,看起来像这样

allFoodAndDrink.add(new Food(parameters);
allFoodAndDrink.add(new Drink(parameters);

所以两种类型的食物和饮料都存储在名为allFoodAndDrink的零食数组中,但是当想要从某个起始索引到最终索引的数组副本时,我被告知要使用:

Arrays.copyOfRange();

但是在使用它时:

int[] drink = Arrays.copyOfRange(allFoodAndDrink, 5, 10);

它吐出并出错并且建议将其转换为Arrays.copyOf()时切换到它然后再吐出另一个错误以恢复为上一个

任何想法

4 个答案:

答案 0 :(得分:2)

使用ArrayList#subList()ArrayList#toArray()

int first = ...;
int last = ...;

Foods[] drink = new Foods[last - first];
allFoodAndDrink.subList(first, last).toArray(drink); // fill the array

答案 1 :(得分:1)

假设您的意思是ArrayList而不是数组,则可以使用

复制List
allFoodAndDrink.subList(5,10);

请注意,这将是一个“浅拷贝”,引用将指向相同的对象

答案 2 :(得分:0)

您可以使用ArrayList的方法sublist(int fromIndex, int toIndex)

ArrayList<Foods>() list = allFoodAndDrink.subList(0, allFoodAndDrink.size()-1);

Foods[] array = (Foods[]) list.toArray();

http://docs.oracle.com/javase/6/docs/api/java/util/AbstractList.html#subList(int, int)

您可以使用ArrayListtoArray()转换为数组 - 方法:http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#toArray()

答案 3 :(得分:0)

感谢我的回复,我刚刚关注并举例说明了int来自哪里我会尝试一些并回复你