我想知道如何初始化一个整数数组,使其大小和值在程序执行过程中发生变化,有什么建议吗?
是:使用ArrayList。
在 Java 中,“普通”数组是固定大小的。你必须给它们一个尺寸,不能扩大或缩小它们。要更改大小,您必须创建一个新数组并复制所需的数据 - 这对您来说效率低且痛苦。
幸运的是,有各种内置类可以实现常见的数据结构,还有其他有用的工具。您需要检查 Java 6 API 以获取它们的完整列表。
需要注意的是:ArrayList 只能保存对象(例如整数),而不能保存基元(例如整数)。在大多数情况下,自动装箱/自动拆箱会默默地为你处理这个问题,但根据你正在做的事情,你可能会得到一些奇怪的行为。
Java 中的数组是固定大小的。您需要的是 ArrayList,它是 Java 中提供的许多极其有价值的集合之一。
而不是
Integer[] ints = new Integer[x]
你使用
List<Integer> ints = new ArrayList<Integer>();
然后要更改列表,您可以使用
ints.add(y)
和 ints.remove(z)
以及许多其他方便的方法,您可以在相应的 Javadocs 中找到。
我强烈建议学习 Java 中提供的 Collections 类,因为它们非常强大,并为您提供了许多内置功能,而 Java 新手往往会尝试不必要地自行重写。
数组一旦实例化,大小就固定。您可以使用列表代替。
自动装箱使列表像数组一样可用,您可以简单地将 int 值放入其中:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
我不同意之前建议
ArrayList
的答案,因为ArrayList
是不是动态数组,而是由数组支持的列表。不同之处在于您不能执行以下操作:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
它会给你一个 IndexOutOfBoundsException ,因为这个位置还没有元素,即使支持数组允许这样的添加。因此,您需要使用自定义的可扩展数组实现,如@randy-lance建议的那样
建议使用List来处理小尺寸。
如果您有大量数字,永远不要使用列表和自动装箱,
列表< Integer>列表
对于每个 int,都会自动创建一个新的 Integer。当列表的大小增加时,你会发现它变得很慢。这些整数是不必要的对象。 在这种情况下,使用估计的大小会更好,
int[] array = new int[ESTIMATED_SIZE];
使用
List
来代替怎么样?例如,ArrayList<integer>
您无法更改数组的大小。但是,您可以创建一个具有正确大小的新数组,并将数据从旧数组复制到新数组。
但是你最好的选择是使用 jacarta commons 中的 IntList。 (这里)
它的工作方式与 List 类似,但占用的空间更少并且效率更高,因为它存储 int,而不是存储 int 上的包装对象(这就是 Integer 类)。
class Main {
public static void main(String[] args) {
int [] a={1, 0, 3, 4, 1, 2, 0, 4};
int count =1;
int [] temp = null;
for(int r : a)
{
if(r!=0)
{
if(temp==null || count >= temp.length)
{
temp =dynamicincrement(count,temp);
}
temp[count-1] = r;
count=count+1;
}
}
System.out.println("the value"+Arrays.toString(temp));
}
public static int [] dynamicincrement(int size,int [] existingdata)
{
int [] trf=new int [size];
if(existingdata==null)
{
return new int[size];
}
if( existingdata!=null && existingdata.length>0)
{
for(int i=0;i<existingdata.length;i++)
{
trf[i]=existingdata[i];
}
}
return trf;
}
}