import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
class MinhaLista<T> {
private List<T> itens = new ArrayList<T>();
public void add (T item) { itens.add(item); }
public T primeiro() { return itens.get(0); }
public T ultimo() {return itens.get(itens.size()-1);}
public T aleatorio() {
return itens.get((int)(Math.random()*(itens.size()-1)));}
public String pertence(T object) {
if( itens.contains(object))
return "Pertence";
return "não Pertence";}
public String igual(MinhaLista<T> ml2) {
Iterator<T> i = itens.iterator();
Iterator<T> i2 = ml2.itens.iterator();
while (i.hasNext() && i2.hasNext()) {
if (i.next() != i2.next())
return "não são iguais";}
if (!i.hasNext() && !i2.hasNext())
return "são iguais";
return "não são iguais";}
public String contida(MinhaLista<T> ml2) {
Iterator<T> i = itens.iterator();
List<T> l2 = ml2.itens;
while (i.hasNext()) {
if (!l2.contains(i.next()))
return "Não esta Contida";}
return "Esta contida";}
public String contem(MinhaLista<T> ml2) {
if( "Esta contida".equals(ml2.contida(this)))
return "Contem";
return "Não contem";}
public MinhaLista<T> intersecao(MinhaLista<T> ml2) {
MinhaLista<T> mlNova = new MinhaLista<T>();
Iterator<T> i = itens.iterator();
while (i.hasNext()) {
T obj = i.next();
if ("Pertence".equals(ml2.pertence(obj)))
mlNova.add(obj);}
return mlNova;}
public void exibe() {
Iterator<T> i = itens.iterator();
while (i.hasNext()) {
System.out.print(i.next().toString());}
System.out.println();}
public String Concatena(MinhaLista<T> ml2,MinhaLista<T> ml){
return ml2.aleatorio().toString()+ml.aleatorio().toString();}
public int ContaElemento(MinhaLista<T> ml2){ // o metodo esta dando um loop infinito
int cont=0;
while (!"".equals(ml2.itens.toString())) {
cont++;
}
return cont ;
}
}
public class ControleLista {
public static void main(String[] args) {
MinhaLista<String> ml = new MinhaLista<String>();
MinhaLista<String> ml2 = new MinhaLista<String>();
ml.add("primeiro");
ml.add("segundo");
ml2.add("primeiro");
ml2.add("segundo");
System.out.println("a) Ã?ltimo elemento: " + ml.ultimo());
System.out.println();
System.out.println("b) Elemento qualquer: " +ml.aleatorio());
System.out.println();
System.out.println("C) Terceiro pertence a lista? " + ml.pertence("terceiro"));
System.out.println();
System.out.println("d)As listas são iguais? " + ml.igual(ml2));
System.out.println();
System.out.println("e)L1 está contida em L2? " +ml.contida(ml2));
System.out.println();
System.out.println("f)L1 contém L2? " +ml.contem(ml2));
System.out.println();
System.out.print("g)Calcula interseção: ");
ml.intersecao(ml2).exibe();
System.out.println();
System.out.println("i) Os Itens Concatenados São:"+ml.Concatena(ml2,ml));
System.out.println();
System.out.println("j) A quantidade de elementos: "+ml.ContaElemento(ml2));
}}
Contar os elementos de uma instancia
3 Respostas
Cara,
eu achei sua classe confusa, talvez porque esteja mal edentada (aqui no post do GUJ) ou por realmente ser confusa.
Como estamos falando em generics, o seu T pode ser qualquer coisa, o que torna mais complicado a análise e teria de olhar método a método de sua classe.
Todavia, vejo que você usa o toString() no seu laço de repetição para que faça a comparação, três adendos.
1 - A cada iteração você invoka o método toString(), porque não fazer isso fora do laço de repetição e usar a String de retorno no laço? 
2 - Provavelmente terás de sobrescrever o método toString() de Object, para que ele tenha a ação esperada. O que deve estar acontecendo é que o método toString() deve estar retornando o valor contido no método Object, por isso nunca vai ser vazio ou “”, como queira.
3 - Se usar apenas equals("") a String terá de ser exatamente isso. Eu costumo usar minhaString.trim().isEmpty() quando quero confirmar se a String é vazia ou não, pois dificilmente eu considero que " " é um preenchimento válido.
Forte abraço.
Eu ja tentei com o isEmpty mas da a mesma coisa eu uso o toString para tentar contar os elementos da instancia mas nao ta funcionando,era para queria criar um metodo que retornasse a quantidade de elementos da instancia
Consegui foi simples assim
public int ContaElemento(MinhaLista<T> ml2){
List<T> l2 = ml2.itens;
return l2.size();
}}
valeu