Eu dei uma olhada na API e existem apenas três construtores para a classe ArrayList…; um sem argumentos, outro que recebe um objeto Collection e outro que recebe um inteiro, especificando a capacidade do ArrayList.
Quando li sua mensagem minha idéia era passar um array anônimo na criação do ArrayList.
Pensei numa solução que talvez seja meio tosca, mas de qualquer forma, ai vai:
[code]import java.util.*;
public class ArrayTest {
public static void main(String[] args) {
List ar = new MyArrayList(new String[] { “GUJ”, “JavaWorld”, “Sun” });
Iterator iter = ar.iterator();
while (iter.hasNext()) System.out.println(iter.next());
}
}
class MyArrayList extends ArrayList {
public MyArrayList(Object o[]) {
super();
for (int i = 0; i < o.length; i++) super.add(o[i]);
}
Se me permite a intromissão, seu ArrayList não ficaria melhor assim:
class MyArrayList extends ArrayList {
public MyArrayList(Object o[]) {
super(o.length); // Pega o tamanho de o.
for (int i = 0; i < o.length; i++) super.add(o[i]);
}
}
:?:
Li em algum lugar que a classe ArrayList começa com um array interno de Objects de tamanho 10. E cada vez que ultrapassa o tamanho deste array interno, é criado um novo com o dobro do tamanho do original; e todos os componentes do array original são copiados para o novo array.
Por outro lado, se passasse o tamanho de o para super, o tamanho inicial do ArrayList seria igual ao tamanho de o. Assim, não seria necessário - na construção do MyArrayList - criar novos arrays e alocar memória. Assim há aumento do desempenho. Talvez nada significante, mas ajuda um pouco.
:arrow: Por favor, se falei alguma besteira, me corrigam.
obrigadao pela ajuda pessoal mas eu nao queria ter que fazer isso, eu queria criar uma arraylist porque nao posso ir buscar valores em posicoes especificas de um array normal no velocity… mas ja arranjei uma maneira melhor de fazer isto, criei um metodo no objecto q e passado para o velocity, e esse metodo retorna, a posicao que eu quero do array:
public static String getBuildingName(int i) {
return Cons.BUILDING_NAMES[i];
}
É isto… de qualquer maneira mais uma vez obrigado.
Isso é um fórum; por favor, intrometam-se :mrgreen:
Você está correto, Rafael. É isso mesmo; fica muito melhor!
Além disso, em situações onde não se conhece a quantidade de elementos que serão inseridos no ArrayList, pode-se utilizar o método trimToSize() para reduzir o espaço alocado para o necessário para os elementos inseridos.
[quote=“Morcego”]Boas,
eu queria criar uma arraylist porque nao posso ir buscar valores em posicoes especificas de um array normal no velocity…[/quote]
Pois é, o Velocity não te deixa fazer isso pra evitar ter que lidar com IndexOutOfBoundsExceptions. Mas, pelo que eu vejo, vc conseguiu “subverter” o Velocity muito bem
Ele não está instanciando uma interface, ele está instanciando a classe MyArrayList, e atribuindo uma referência da instância à variável ar, do tipo List, que é uma interface. É o bê-a-bá do polimorfismo