Java dynamic array sizes?

前端 未结 18 2122
星月不相逢
星月不相逢 2020-11-22 04:37

I have a class - xClass, that I want to load into an array of xClass so I the declaration:

xClass mysclass[] = new xClass[10];
myclass[0] = new xClass();
my         


        
相关标签:
18条回答
  • 2020-11-22 05:29

    You can do some thing

    private  static Person []  addPersons(Person[] persons, Person personToAdd) {
        int currentLenght = persons.length;
    
        Person [] personsArrayNew = Arrays.copyOf(persons, currentLenght +1);
        personsArrayNew[currentLenght]  = personToAdd;
    
        return personsArrayNew;
    
    }
    
    0 讨论(0)
  • 2020-11-22 05:30

    In java array length is fixed.

    You can use a List to hold the values and invoke the toArray method if needed See the following sample:

    import java.util.List;
    import java.util.ArrayList;
    import java.util.Random;
    
    public class A  {
    
        public static void main( String [] args ) {
            // dynamically hold the instances
            List<xClass> list = new ArrayList<xClass>();
    
            // fill it with a random number between 0 and 100
            int elements = new Random().nextInt(100);  
            for( int i = 0 ; i < elements ; i++ ) {
                list.add( new xClass() );
            }
    
            // convert it to array
            xClass [] array = list.toArray( new xClass[ list.size() ] );
    
    
            System.out.println( "size of array = " + array.length );
        }
    }
    class xClass {}
    
    0 讨论(0)
  • 2020-11-22 05:32

    No you can't change the size of an array once created. You either have to allocate it bigger than you think you'll need or accept the overhead of having to reallocate it needs to grow in size. When it does you'll have to allocate a new one and copy the data from the old to the new:

    int[] oldItems = new int[10];
    for (int i = 0; i < 10; i++) {
        oldItems[i] = i + 10;
    }
    int[] newItems = new int[20];
    System.arraycopy(oldItems, 0, newItems, 0, 10);
    oldItems = newItems;
    

    If you find yourself in this situation, I'd highly recommend using the Java Collections instead. In particular ArrayList essentially wraps an array and takes care of the logic for growing the array as required:

    List<XClass> myclass = new ArrayList<XClass>();
    myclass.add(new XClass());
    myclass.add(new XClass());
    

    Generally an ArrayList is a preferable solution to an array anyway for several reasons. For one thing, arrays are mutable. If you have a class that does this:

    class Myclass {
        private int[] items;
    
        public int[] getItems() {
            return items;
        }
    }
    

    you've created a problem as a caller can change your private data member, which leads to all sorts of defensive copying. Compare this to the List version:

    class Myclass {
        private List<Integer> items;
    
        public List<Integer> getItems() {
            return Collections.unmodifiableList(items);
        }
    }
    
    0 讨论(0)
  • 2020-11-22 05:34

    I don't know if you can change the size at runtime but you can allocate the size at runtime. Try using this code:

    class MyClass {
        void myFunction () {
            Scanner s = new Scanner (System.in);
            int myArray [];
            int x;
    
            System.out.print ("Enter the size of the array: ");
            x = s.nextInt();
    
            myArray = new int[x];
        }
    }
    

    this assigns your array size to be the one entered at run time into x.

    0 讨论(0)
  • 2020-11-22 05:39

    Java Array sizes are fixed , You cannot make dynamic Arrays as that of in C++.

    0 讨论(0)
  • 2020-11-22 05:40

    You set the number of elements to anything you want at the time you create it:

    xClass[] mysclass = new xClass[n];
    

    Then you can initialize the elements in a loop. I am guessing that this is what you need.

    If you need to add or remove elements to the array after you create it, then you would have to use an ArrayList.

    0 讨论(0)
提交回复
热议问题