Eu queria saber como inicializar uma matriz de inteiros de modo que seu tamanho e valores mudem durante a execução do meu programa, alguma sugestão?
Eu queria saber como inicializar uma matriz de inteiros de modo que seu tamanho e valores mudem durante a execução do meu programa, alguma sugestão?
Respostas:
Sim: use ArrayList .
Em Java, os arrays "normais" têm tamanho fixo. Você tem que dar um tamanho a eles e não pode expandi-los ou contraí-los. Para alterar o tamanho, você precisa fazer uma nova matriz e copiar os dados desejados - o que é ineficiente e uma dor de cabeça.
Felizmente, existem todos os tipos de classes integradas que implementam estruturas de dados comuns e também outras ferramentas úteis. Você vai querer verificar a API Java 6 para obter uma lista completa deles.
Uma advertência: ArrayList só pode conter objetos (por exemplo, inteiros), não primitivos (por exemplo, ints). Na MAIORIA dos casos, autoboxing / autounboxing cuidará disso para você silenciosamente, mas você pode ter um comportamento estranho dependendo do que estiver fazendo.
size
medida que o programa prossegue; ele obtém qualquer tamanho que esteja size
quando a linha for executada.
null
no final. Alguma ideia por quê?
Arrays em Java são de tamanho fixo. O que você precisa é de um ArrayList, uma das várias coleções extremamente valiosas disponíveis em Java.
Ao invés de
Integer[] ints = new Integer[x]
você usa
List<Integer> ints = new ArrayList<Integer>();
Em seguida, para alterar a lista que você usa ints.add(y)
e ints.remove(z)
entre muitos outros métodos úteis, você pode encontrar nos Javadocs apropriados.
Eu recomendo fortemente estudar as classes de coleções disponíveis em Java, pois elas são muito poderosas e fornecem muitas funcionalidades embutidas que os novatos em Java tendem a tentar reescrever desnecessariamente.
List<Integer>
vez de ArrayList<Integer>
?
Os arrays têm tamanho fixo depois de instanciados. Você pode usar uma lista em vez disso.
O Autoboxing torna uma List utilizável de forma semelhante a uma matriz, você pode simplesmente colocar valores int nela:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Não concordo com a sugestão de respostas anteriores ArrayList
, porque nãoArrayList
é um Dynamic Array, mas uma List apoiada por um array. A diferença é que você não pode fazer o seguinte:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
Isso lhe dará uma IndexOutOfBoundsException porque não há nenhum elemento nesta posição ainda, embora a matriz de apoio permitiria tal adição. Portanto, você precisa usar uma implementação de Array extensível personalizada, como sugerido por @ randy-lance
Simple code for dynamic array. In below code then array will become full of size we copy all element to new double size array(variable size array).sample code is below
public class DynamicArray {
static int []increaseSizeOfArray(int []arr){
int []brr=new int[(arr.length*2)];
for (int i = 0; i < arr.length; i++) {
brr[i]=arr[i];
}
return brr;
}
public static void main(String[] args) {
int []arr=new int[5];
for (int i = 0; i < 11; i++) {
if (i<arr.length) {
arr[i]=i+100;
}
else {
arr=increaseSizeOfArray(arr);
arr[i]=i+100;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println("arr="+arr[i]);
}
}
}
Fonte: Como fazer array dinâmico
Recomenda-se usar List para lidar com tamanhos de pequena escala.
Se você tiver um grande número de números, NUNCA use List e autoboxing,
Lista lista <Inteiro>
Para cada int, um novo Integer é criado automaticamente. Você perceberá que fica lento quando o tamanho da lista aumenta. Esses inteiros são objetos desnecessários. Nesse caso, usar um tamanho estimado seria melhor,
int[] array = new int[ESTIMATED_SIZE];
Que tal usar um List
? Por exemplo,ArrayList<integer>
Você não pode alterar o tamanho de uma matriz. Você pode, no entanto, criar um novo array com o tamanho certo e copiar os dados do array antigo para o novo.
Mas sua melhor opção é usar o IntList do jacarta commons. ( aqui )
Funciona como uma List, mas ocupa menos espaço e é mais eficiente do que isso, porque armazena int's em vez de armazenar objetos de invólucro em vez de int's (é isso que a classe Integer é).
Eu respondi a esta pergunta e não, você não precisa de um arraylist ou qualquer outra coisa, isso foi uma atribuição e eu concluí, então sim os arrays podem aumentar de tamanho. Aqui está o link Como usar Java Dynamic Array e aqui está o link para minha pergunta que respondi Java Dynamic Arrays
int[] array = new int[size];
size
é uma variável, mas o comprimento de um array deve ser fixo, certo? @Lord Torgamus