[Resolvido] Utilizar/Manipular a mesma Arraylist em várias classes?

Boa noite a todos, esse é meu primeiro tópico no forum, decidi faze-lo após uma longa procura na internet a respeito deste assunto, encontrei bastante coisa mas nada que pudesse explicar detalhadamente para um iniciante como fazer uso de tal recurso.
Para um trabalho na faculdade preciso projetar um programa qualquer usando os principios de OO e sem banco de dados.
Meu projeto conciste em basicamente 4 classes, Jogador, Equipe, ListaJogador e Partida, ainda não terminei de desnvolve-las pois preciso antes descobrir se existe solução para minha dúvida.
Na minha classe main são criadas a lista de Jogadores (arraylist) que esta dentro de outra classe e os própios jogadores em seguida tento adicionar os jogadores a esta lista, mas não obtive sucesso, após adicionar os jogadores, eu gostaria de utilizar essa arraylist para fazer consultas dentro da classe equipe e selecionar os jogadores que fazem parte da equipe, segue os codigos simplificados:
Classe do Jogador

public class Jogador {
	private String nome;
	private String equipe;

	public Jogador(String nome, String equipe) {
		this.nome= nome;
                this.equipe = equipe;
                alocarNalista();
	}

	public void alocarNalista() {
		// aqui seria para alocar o jogador na lista automaticamente assim que ele for criado (mas não consegui).
	}

Classe da lista, não sei se é necessário fazer uma classe para esta lista.

[code]
public class ListaJogador {
private ArrayList listaJogador;

public ListaJogador(){
	ArrayList<Jogador> listaJogador = new ArrayList<Jogador>();
}

  public  void adicionarJogador(Jogador c){  
        listaJogador.add(c);  
             
    }  
[/code]

Classe da equipe, no qual seleciono os jogadores da mesma equipe

public class Equipe {
private String nome;

public Equipe(String nome){
	 this.nome = nome;
}

public Jogador procurarPorTime (String equipe){
	for(int x = 0; x < aqui entraria uma referencia a lista.size() ; x++){ 
	       if (jogador.getEquipe().equals(equipe)) {  
         return jogador;  
      }  
   }  
   return null;  
}  
}

e por fim uma classe aonde crio tudo

new ListaJogador();
		Jogador j1 = new Jogador("Kaka", "Real Madrid");
		ListaJogador.adicionarJogador(j1); 
// na verdade como viram eu queria q fosse adicionado na lista por um metodo dentro da classe do jogador q fosse ativada quando ele fosse criado
		Jogador j2 = new Jogador("Neymar", "Santos");
		ListaJogador.adicionarJogador(j2);

new Equipe("Real Madrid");
new Equipe("Santos");

Como podem ver ainda estou bem confuso em relação a tudo isso, pelo eclipse mostra muitos erros e sempre pede para eu deixar a lista static, resumindo o que eu tenho duvido é como criar a lista e manipula-la em diferentes classes.
Obrigado

Deixar static e público poderia funcionar, mas é gambiarra e um design não Orientado a Objetos.

Você precisa aprender a passar a referência dos objetos. Por exemplo, se o teu objeto Equipe precisa manipular a lista de jogadores, passe a referência preferencialmente no construtor da classe Equipe. Algo assim:

public class Equipe {
private String nome;
private ListaJogador listaJogador;

public Equipe(String nome, ListaJogador listaJogador){
	 this.nome = nome;
         this.listaJogador = listaJogador;
}

public Jogador procurarPorTime (String equipe){
	for(int x = 0; x < listaJogador.size() ; x++){  //vc precisa implementar o método size na tua lista
	       if (jogador.getEquipe().equals(equipe)) {  
         return jogador;  
      }  
   }  
   return null;  
}

E na hora de instanciar:

ListaJogador lista = new ListaJogador();
Jogador j1 = new Jogador("Kaka", "Real Madrid");
lista.adicionarJogador(j1); 
Equipe realMadrid = new Equipe("Real Madrid", lista);

Mas cuidado pra não fazer código macarrônico. Os teus objetos devem ter responsabilidades bem definidas, evite ter referências pra tudo que é lado, se não fica difícil de manter o código.

Em relação a classe ListaJogador, ela é necessária apenas se você for adicionar mais lógicas (em relação as já existentes nas classes que implementam List).

Valeu Wagner, tinha feito pelo modo static e tinha dado certo, mudei pois é um projeto de OO é precisa estar de acordo com as normas, eu realmente não tinha pensado em fazer deste jeito antes, funcionou.
Mas agora caí em outro problema básico, que também estou tendo dificuldades em resolver.

public Jogador procurarPorTime (String equipe){ for(int x = 0; x < listaJogador.size() ; x++){ //vc precisa implementar o método size na tua lista if (jogador.getEquipe().equals(equipe)) { return jogador; } } return null; }

nesse código eu gostaria que fosse assim, eu adiciono o atributo habilidade aos jogadores, gostaria de percorrer a ArrayList e q meu retorno fosse as habilidades em int dos meus jogadores, no exemplo abaixo o eclipse não me deixa pegar a variável int, apenas a variável Jogador da minha classe.

public int procurarPorTime (String equipe){ for(int x = 0; x < listaJogador.size() ; x++){ if (jogador.getEquipe().equals(equipe)) { int hab = listaJogador.get(x).getHabilidade(); return hab; } } return null; }

Outra duvida que tenho é q o eclipse fica dizendo nesta linha, cannot make a static reference to the non-static method getEquipe() from the type Jogador, por que?

  if (Jogador.getEquipe().equals(equipe)) { 

só mais uma coisa, o eclipse fica dizendo que este codigo é um dead code, pq?

 for(int x = 0; x < listaJogador.size() ; x++){ 

Você quer que o resultado seja uma lista de habilidades? Você precisa fazer o que com estas variáveis exatamente?

Você tá usando a classe ListaJogador ainda? Ou esta usando um List diretamente? Se estiver usando ListaJogador, poste a classe aqui para entendermos melhor.

Jogador é uma classe no seu exemplo (de acordo com a convenção, classes começam com letra maiúscula). Você está tentando acessar o método getEquipe que é de instância por meio da classe isso não pode. Veja bem, cada jogador tem uma equipe que pode ser diferente da equipe dos demais. Ou seja, o método getEquipe retorna a equipe da instância, não da classe. Talvez você queira usar jogador.getEquipe e não Jogador (com J maiúsculo).

Estou usando list diretamente agora.
Habilidade esta como uma tributo de um Jogador.

new Jogador("Kaka",  "Real Madrid",  83);
new Jogador("Ozil",  "Real Madrid",  87);

o que quero fazer é dentro da classe equipe fazer uma busca na listaJogador (onde os 2 jogadores de cima foram adicionados) e retornar como valor a soma de suas habilidades (83 + 87), então tem q passar pelo filtro de equipe jogador.getEquipe().equals(equipe) e depois pegar essas habilidades getHabilidades() somar e colocar no return como sendo int, não sei se consegui ser claro. O problema que me deparei foi que não consegui usar int como return pois é uma lista de objetos. quando faço em uma classe void eu consigo capturar a soma mas não tem return.

[code]public void mostrar() {
int sum = 0;
int i ;
for( i =0; i<lista.size(); i++){
int hab = (Integer) lista.get(i).getHabilidade();
sum = sum + hab;
System.out.println(sum);
}

}[/code]

e também não entendi direito o jogador.getEquipe() (com j minusculo) ele esta se referindo a quem?
Obrigado

Ta resolvido, o maior problema é q eu estava colocando o return dentro do for, obrigado pela ajuda