Arrays.binarySearch com objetos

Galera estou estudando pra OCJP e estou com dificuldades com o método citado, segue meu código:

package projetoparateste;

import java.util.*;

class Dog implements Comparable<Dog>{
	String name;
	public Dog (String n) {this.name = n;}

	public int compareTo(Dog o){
		return name.compareTo(o.name);
	}
}

public class ProjetoParaTeste {
    public static void main(String[] args) {
		List<Dog> lista = new ArrayList<Dog>();

		lista.add(new Dog("cao"));
		lista.add(new Dog("cao1"));
		lista.add(new Dog("cao2"));

		Arrays.sort(lista);

		System.out.println(Arrays.binarySearch(lista, new Dog("teste")));
    }
}

Quando tento dar um sort na lista, o compilador reclama erro. No meu livro diz que posso utilizar este método tanto com arrays quanto conjuntos, aí fiquei em dúvida em relação ao o que são arrays e conjuntos de fato, pra mim esse objeto que eu criei numa List(ArrayList) é um array, ou array seria somente aquele com essa cara:

O Arrays.sort é para arrays primitivos Dog[]

Para lista, use o Collections.sort.

Então os métodos da classe Arrays devo utilizar somente com arrays primitivos? Obs.: todos os outros conjuntos: list, arrayList, map, etc, devem ser utilizados com a classe Collections?

Fiz a alteração no código contudo ocorre erro na linha 24, “cannot find symbol” na variável lista.

Acredito que estou com dificuldade em utilizar a classe Arrays devido a definição de arrays primitivos e os outros tipos de arrays, se alguém pudesse explanar, ficaria grato :slight_smile:

Seu código correto tem que ficar da seguinte forma :

import java.util.*;

class Dog implements Comparable{
String name;
public Dog (String n) {this.name = n;}

public int compareTo(Dog o){
    return name.compareTo(o.name);
}

}

public class ProjetoParaTeste {
public static void main(String[] args) {
List lista = new ArrayList();

    lista.add(new Dog("cao"));
    lista.add(new Dog("cao1"));
    lista.add(new Dog("cao2"));

    Collections.sort(lista);

    System.out.println(Collections.binarySearch(lista, new Dog("teste")));
}

}

Sim, a classe Arrays lida exclusivamente com Arrays primitivos.
Os métodos de coleções, da Java Collections Framework, estão na classe Collections.

Estranho. Tem certeza que escreveu a palavra certa? Esse erro ocorre quando uma variável não foi declarada.

Não existem outros tipos de arrays. Só os primitivos. Eles são conjuntos de elementos, de tamanho fixo, ordenados por um índice, e declarados por []. Todos os outros tipos de coleção são objetos. É o caso do ArrayList (uma lista que usa arrays por debaixo dos panos) e da LinkedList (lista encadeada).

As coleções fazem parte de uma framework do java chamada de Java Collections Framework. Dê uma lida nos links indicados para entender melhor como cada uma delas funciona. Entre as coleções, implementam-se as listas, conjuntos e mapas.

Como o regifelix indicou, o erro estava na linha 24 onde usei a classe Arrays em vez de Collections. Consegui entender a diferença entre as duas classes e quando usar a correta, obrigado pela ajuda ai, vlw :slight_smile:
Vini, estou estudando a Collections faz algum tempo já, mas fiquei um pouco confuso quando surgiu a Arrays, hehe.