我有一个快速的问题。我有一个Java中的整型数组,需要它的长度在整个类中变化。具体来说,我需要在某些情况下增加1。我试过这样。如何增加阵列长度
sbgHeadX = new int[ numberOfSBG ];
我会增加整数变量numberOfSBG当我需要,但我不认为这个工程。有没有其他方法?
我有一个快速的问题。我有一个Java中的整型数组,需要它的长度在整个类中变化。具体来说,我需要在某些情况下增加1。我试过这样。如何增加阵列长度
sbgHeadX = new int[ numberOfSBG ];
我会增加整数变量numberOfSBG当我需要,但我不认为这个工程。有没有其他方法?
我会建议你使用ArrayList,你将不必担心长了。一旦创建,则不能修改的阵列大小:
数组是保存单个类型的值的一个固定数目的容器对象。创建数组时创建数组的长度。创建后,其长度是固定的。
(Source)
我将如何访问数组列表的特定索引? – kullalok 2012-04-21 02:33:48
@ user1276078'yourArraylist.get(2)'相当于'yourClassicArray [2]' – talnicolas 2012-04-21 02:41:52
虽然这可行,但这可能会导致不必要的自动装箱,因为OP指示它是原始的int。 Java集合需要Object作为它们的值,所以每次调用集合方法时,JVM都会将所有值转换为Integer。随着时间的推移,这可能会增加成本。很明显,程序员需要决定是否值得像Hunter McMillen所建议的那样“开销”,但他的回答是,恕我直言,这个问题更准确。 – 2013-12-02 15:10:26
*“实际上发生的事情是VM调整阵列列表暴露的数组的大小。”*。不正确。实际上,'ArrayList'的代码创建一个新的后备数组并复制现有数据的内容。数组长度不能改变......即使通过JVM。这将违反Java语言规范。 – 2012-04-21 01:37:42
@StephenC你说得对。诠释错误。 – 2012-04-21 01:39:28
你仍然只有一半的权利。这不是JVM进行调整。 ArrayList类在普通的Java代码中完成它。并且数组不会暴露在数组列表中...它是由数组列表隐藏的私有对象。 – 2012-04-21 02:11:14
如果你不想或者不能使用ArrayList,然后有一个实用的方法:
Arrays.copyOf()
,将允许您指定新的大小,同时保留元素。
“该算法在许多数据集上提供n * log(n)性能,这些数据集会导致其他快速排序降至二次性能。” – 2012-04-21 01:34:19
Java中的数组具有固定大小,它们在声明时指定。要增加数组的大小,您必须创建一个更大大小的新数组,并将所有旧值复制到新数组中。
例如:
char[] copyFrom = { 'a', 'b', 'c', 'd', 'e' };
char[] copyTo = new char[7];
System.out.println(Arrays.toString(copyFrom));
System.arraycopy(copyFrom, 0, copyTo, 0, copyFrom.length);
System.out.println(Arrays.toString(copyTo));
另外,您可以使用动态数据结构是怎样的一个列表。
恕我直言,在Jakub的答案中使用'Arrays.copyOf()',会使代码更短,更具可读性。 – ToolmakerSteve 2015-09-13 15:34:15
Item[] newItemList = new Item[itemList.length+1];
//for loop to go thorough the list one by one
for(int i=0; i< itemList.length;i++){
//value is stored here in the new list from the old one
newItemList[i]=itemList[i];
}
//all the values of the itemLists are stored in a bigger array named newItemList
itemList=newItemList;
您可以使用ArrayList。数组的大小是固定的。
这Example这里可以帮助你。这个例子很容易输出。
Output: 2 5 1 23 14
New length: 20
Element at Index 5:29
List size: 6
Removing element at index 2: 1
2 5 23 14 29
你能提供一个合理的最大值。显然你的数组永远不会比Integer.MAX_VALUE大,但是如果你知道你的数组也不会超过300,你可以将它的长度设置为300. – emory 2012-04-21 01:42:47
@emory - 个人而言,我会考虑这样做是一个强大的代码味道:结果是一个数组,其中一些元素是“不应该被使用”的。这是一种容易出错且笨拙的编码风格,需要在有效元素的数量上传递一个单独的变量。还打破了'.size()'产生要处理的元素数量的假设。 – ToolmakerSteve 2015-09-13 15:37:00