ae pessoal estou com o seguinte problema,
estou tendo que fazer um:
if (! Vector.contais(Object) ) {
Vector.add(Object);
}
ou seja sempre que eu for adicionar algum elemento a esse Vector eu estou olhando todo o Vector para ver se ja existe tal elemento, tem como eu usando Vector, adicionar um Objeto e se o mesmo ja existir ele mesmo sobrescrever ou vou ter que ficar usando esse if ?
porque esse Vector tende a ficar grande, e com isso vou perder muito em performace.
[size=7]ps.: não entendam como metodo static[/size]
Essa implementação seria automática se você utilizasse um Set ao invés de um List. Se você não sabe, o Set é justamente uma coleção que não permite itens repetidos.
Ficaria difícil trocar a sua implementação para usar um Set (exemplo: HashSet, LinkedHashSet, etc)?
Só lembrando que a utilização de um Set não é feita assim, de forma indiscriminada. Os objetos T a serem inseridos dentro de um Set devem implementar a interface java.lang.Comparable. A forma como é implementado o método compareTo desta interface é que determina quando o objeto T é igual a outro objeto T.
Há também uma outra alternativa, que permite se ter um Set quando Tnão implementa a java.lang.Comparable: Criar o Set utilizando um dos seus construtores que pede por parâmetro um objeto de uma classe que implemente a interface java.util.Comparator.
Veja este tópico para mais detalhes a respeito de Comparable e Comparator: http://www.guj.com.br/posts/list/45985.java#241201
Apos ler este tópico, dê uma olhada na API, por exemplo, da classe TreeSet: http://java.sun.com/j2se/1.5.0/docs/api/java/util/TreeSet.html
Você tem 3 tipos de Set: o desordenado (HashSet), o ordenado por ordem de inserção (LinkedHashSet) e o ordenado pelo valor (TreeSet).
Se quiser acesso super-rápido mas não se importa com a ordem, use o HashSet.
Se quiser acesso rápido, precisa de que esteja ordenado de acordo com a ordem de inserção, mas não se incomoda com gastar mais memória, use o LinkedHashSet.
Se quiser acesso um pouco mais lento, mas precisa de que esteja ordenado pelo valor, use o TreeSet.
Vector é uma classe que não deve ser usada em novos projetos (é mais lenta, principalmente em máquinas multi-processadas); use-a apenas por compatibilidade com projetos antigos.
Se precisar de uma lista, use ArrayList (em 95% dos casos, onde você precisa acessar os elementos por índice) ou LinkedList (em 5% deles, onde você não precisa acessar por índice, mas precisa fazer inserções e remoções rápidas.)
Quanto ao que o Mantu falou, você só precisa implementar a interface Comparable se você trabalhar com um Set ordenado. Se você utilizar um HashSet, por exemplo, ele fará as comparações pelo equals/hashcode mesmo.
Outra coisa: mesmo se você não implementar o equals/hashcode, ainda sim é possível utilizar o Set, porém as comparações serão feitas do tipo “==” (isto é, um objeto só será igual a ele mesmo)
Completando, eu percebi que muita gente que faz aquela matéria de Estruturas de Dados na faculdade acaba ficando com alergia de estruturas de dados.
Não são capazes de usar algo mais complexo que um array, porque não aprenderam a usar as estruturas de dados, apenas a implementá-las (aham), e não sabem para que servem na verdade.
infelizmente teria que alterar bastante coisas aqui, atualmente uso um Vector de Hashtable
Vector.add(Hashtable), vou tentar resolver de alguma outra forma, como sao dados do banco estou tentando fazer isso na minha propria consulta, é porque ela está um pouco complexa e por se tratar de relatorios com grande quantidade de informações nao é viavel pra mim fazer esse if.