[RESOLVIDO]Problemas usando ArrayList

Galera, tô aprendendo java, recebi um Exercício pra estudar sobre como funciona e usar ArrayList, dai tive alguns problemas:

Se eu tentar copilar o programa do jeito que está ai, o erro é o seguinte:
“Note: Agenda.java uses unchecked or unsafe operations
Note: Recompile with -Xlint:unchecked for details.”

Se eu mudar a linha ArrayList l = new ArrayList();
para
ArrayList l = new ArrayList();
(que eu não faço ideia do pra quê dos ele dá o seguinte erro:

“Agenda.java:34: cannot find symbol
symbol : method add(Contato)
location: interface java.util.List<java.lang.String>
l.add(new Contato(nome,telefone,email,site));”

Espero que possam me ajudar e tirar minhas dúvidas [=
Segue o código:


import java.util.ArrayList;
import java.util.*;

public class Agenda {

	public static void main (String[] args) {
		Scanner sc=new Scanner (System.in);
		System.out.println ("Bem Vindo à Agenda!");
		System.out.println (" ");
		System.out.println ("O que deseja fazer?");
		System.out.println ("1 - Adicionar Contato.");
		System.out.println ("2 - Editar Contato.");
		System.out.println ("3 - Remover Contato.");
		System.out.println ("4 - Buscar Contato.");
		System.out.println ("5 - Exibir Relação Completa.");
		System.out.println ("0 - Sair do Programa.");
		System.out.println (" ");
		System.out.print ("Opção: ");
		int o = sc.nextInt();
	ArrayList l = new ArrayList();
	while (o!=0) {
	switch(o) {
		case 1: {
			System.out.println (" ");
			System.out.print ("Digite o Nome do Contato: ");
			String nome=sc.nextLine();
			System.out.print ("Digite o Telefone de " + nome + ":");
			String telefone=sc.nextLine();
			System.out.print ("Digite o Email de " + nome + ":");
			String email=sc.nextLine();
			System.out.print ("Digite o Site de " + nome + ":");
			String site=sc.nextLine();
			l.add(new Contato(nome,telefone,email,site));
			break;
		}
		case 5: {
			Iterator i = l.iterator();
			while (i.hasNext()) {
			Contato a = (Contato) i.next();
			System.out.println(a.getNome());
			}
			break;
		}
	}	
	}
	System.out.println ("Programa Encerrado!");
	}
}

Aqueles “<” e “>” servem pra dizer que tipo que vai ser inserido dentro do ArrayList. No seu caso, você não colocou nada, mas você adiciona Contato. Então troque

ArrayList l = new ArrayList();

por

ArrayList<Contato> l = new ArrayList<Contato>();.

[quote=Andre Brito]Aqueles “<” e “>” servem pra dizer que tipo que vai ser inserido dentro do ArrayList. No seu caso, você colocou String, mas você adiciona Contato. Então troque

ArrayList<String>

por

ArrayList<Contato>

aaaaaaaaaa, então o ArrayList serve para declarar o que ele vai conter…
o programa copilou, eu vou ter que sair agora pra ir pra faculdade sem poder testar tudo, mas logo venho aqui postar se funcionou direitinho.
Muito Obrigado!

E como se vc tivesse colocando , hei aqui neste array vai poder entrar somente Contato . ou seja um container de Contato .

E tem várias vantagens.

Note que seu método get vai retornar um contato e não um object, o que evita cast:

//Sem dizer o tipo do ArrayList Contato c = (Contato) arrayDeContato.get(10); //Depois de dizer o tipo usando < > Contato c = arrayDeContato.get(10);

O java também não vai deixar vc inserir coisas inválidas, nem por acidente:

//Sem dizer o tipo do ArrayList
arrayDeContato.add(cachorro); //Deixa fazer :(
//Depois de dizer o tipo usando < >
arrayDeContato.add(cachorro); //Erro de compilação. Cachorro não é um contato 

E por aí vai.

beleza, obrigado a todos pela ajuda, funcionou perfeitamente [=

alguém poderia me dizer mais ou menos como fazer uma busca no ArrayList só pelo começo do nome?
por exemplo:

			else if (o==2) {
				sc.nextLine();
				System.out.print ("Digite o Nome do Contato que deseja buscar: ");
				String b=sc.nextLine();
				Iterator i = l.iterator();
				while (i.hasNext()) {
					Contato a = (Contato) i.next();
					if (b.equals(a.getNome())) {
						System.out.println (" ");
						System.out.println ("Nome: " + a.getNome() + ". - Telefone: " + a.getTelefone() + ".");
					}
				}
			}

com isso eu consigo buscar pelo nome todo, queria saber uma maneira de eu buscar por “J” e ele exibir todos os nomes que comecem com o J, e assim por diante
se puderem me ajudar em mais essa fico grato (de novo) [=

Boa noite…

Para que vc entenda realmente seu codigo, estude coleção e generico…

Ate mais…

sua outra duvida:

Use o comando “like”

Na verdade eu tenho um metodo que tem como argumento uma String chamada pesquisa, ou seja meu metodo agurda uma string para executar a pesquisa, quando o usuario digitar por exemplo a letra “C”, todos os nomes que começarem com esta letra sera retornados…

rs = st.executeQuery(“Select * from pessoa where nome like '”+pesquisa+"%’");

Na verdade acredito que isso não seja um erro, é só um um warning, ele compila o código assim mesmo do jeito que está. Porém permite que você adicione qualquer tipo de objeto a ArrayList, ou no caso de utilizar o , permite apenas objetos String, ou objetos que extendam String, e como o objeto Contato não se enquadra nisso, gera um erro de verdade no segundo caso.

A busca pelo nome terá que ser feita manualmente mesmo. Mas as funções de busca, numa lista sequencial não-ordenada, são muito simples. Seguem o seguinte modelo:

public Contato buscaPeloNome(String nome) { for (Contato contato : l) { if (contato.getNome().equals(nome)) { return contato; return null; }