开发者

Java array declaration without hard coding the size

开发者 https://www.devze.com 2023-04-09 15:44 出处:网络
How can I initialize an array of objects of a cla开发者_运维问答ss in another class without hardcoding its size?Use a List. The size does not need to be declared on creation of the List. The toArray()

How can I initialize an array of objects of a cla开发者_运维问答ss in another class without hardcoding its size?


Use a List. The size does not need to be declared on creation of the List. The toArray() method will return an array representation of the list. There are multiple implementations you can use but the most popular tends to be ArrayList (though it is best to map the implementation to your particular situation).


Arrays have a fixed size after creation. The size doesn't need to be known at compile-time, but it does need to be known at creation time. For example:

public String[] createArray(int size) {
    // Not hard-coded, but array is not expandable
    return new String[size];
}

If you want a collection which can grow an shrink over time, look at the various List<E> implementations, such as ArrayList<E>.


Arrays are fixed in length. I would recommend using a Collection.

Here is an article on collections:

http://en.wikipedia.org/wiki/Java_collections_framework

With these, you can add elements by using an Add() command or something similar.

As mentioned in the previous answers, an ArrayList or List are collections.


Object[] will always be fixed size. If you need a variable length collection, try ArrayList, LinkedList, or one of the many others.

Pick the collection carefully, since they all have different performance aspects.


For mutable arrays other container objects are used.

When using a set of objects, an ArrayList or Vector object is used. You can also store objects with an object key e.g. "Name" = "Ben" instead of [0] = "Ben".

Vector v = new Vector();
for(int i = 0; i < 100; i++){
 Object o = new Object();
 // init object
 v.addElement(o);
}

for(int i = 0; i < 100; i++){
 Object o = v.elementAt(i);
 // manipulate object
}

Now you have an arbritairy list of object of undefined length. Size found by using vector.size() method.

java.util package is required and part of J2SE 1.3 and higher.


As noted elsewhere, an array object has a fixed size. If there's some reason you must use an array, you can use one or both of these techniques:

  • Make it the larger than you need, leaving the unused entries null. You may want to keep a "slotsUsed" variable.

  • When the array gets too small, make a bigger one and copy the contents into it.

These are both used inside ArrayList.


You can create a new array and initialize it like this.

String[] strArray = {"Initialize","Array","Like","This"};

If you want an array with a dynamic size I would recommend using an ArrayList.


If you want an array of primitive instead of objects, you can use Trove4j. Otherwise use an ArrayList, or CopyOnWriteArrayList to wrap an array. There are other List implementations but these do not act like arrays for access time.


Sometimes it is useful, in case you know an upper bound of the objects your application needs, to declare the size of an array as

static final int ARRAY_SIZE = 1000;

This goes near the beginning of the class so it can be easily changed. In the main code instantiate the array with

Object[] objects = new Object[ARRAY_SIZE];

Also in case the array you want to use has the same size as another array consider using

Object[] objects = new Object[other_objects.length];
0

精彩评论

暂无评论...
验证码 换一张
取 消