Pode estar utilizando List, ArrayList ou até mesmo Hashmap (Caso não saiba o que são esses metodos e como utiliza-los. Pode estar procurando no Google alguns tutoriais ensinando a como usar esses métodos no Java, pois vão te ajudar muito não só agora, mais mas pra frente também).
Mas uma maneira/exemplo simples de entender (Só que não muito viável) seria utilizar ArrayList.
Suponhamos que você tenha uma classe Pessoa da seguinte maneira:
public class Pessoa{
private String Nome;
private Date DataNasc;
/* Construtor com tratamento de data e etc....
*get e setrs .... */
}
E você possui uma lista de dados do tipo Pessoa
ArrayList<Pessoa> Lista_De_Pessoas = new ArrayList<Pessoa>();
/* inserindo os dados na Lista */
Lista_De_Pessoas.add(new Pessoa("Joao","01/01/2015"));
Lista_De_Pessoas.add(new Pessoa("Maria","01/01/1990"));
Lista_De_Pessoas.add(new Pessoa("Rafael","01/01/2003"));
E precisa pegar somente as pessoas que nasceram no ano 2000 ou posterior ao ano 2000 ou não tem data de nascimento dessa lista.
Você pode criar uma nova ArrayList para armazenar essas pessoas que Nasceram depois de 2000.
Para saber você pode simplesmente percorrer a lista original verificando a data se é posterior ou vazio.
String Data = "01/01/2000";
Date date2 = null;
SimpleDateFormat SDF = new SimpleDateFormat("dd/MM/yyyy");
try {
//Converte String para formato Date
date2 = SDF.parse(Data);
} catch (ParseException ex) {
Logger.getLogger(Teste.class.getName()).log(Level.SEVERE, null, ex);
}
ArrayList<Pessoa> Pessoas_DepoisDe2000 = new ArrayList<Pessoa>();
// Percorre a Lista
for (int i = 0; i < Lista_De_Pessoas.size(); i++) {
//Verifica se a data não é vazia
if(Lista_De_Pessoas.get(i).getDataNasc().toString() != "") {
// Verifica se DataNasc é posterior a Data
if (Lista_De_Pessoas.get(i).getDataNasc().after(Data)) {
//Se for posterior adiciona na lista
Pessoas_DepoisDe2000.add(Lista_De_Pessoas.get(i));
}
}
else //Se for vazia. Adiciona na lista
Pessoas_DepoisDe2000.add(Lista_De_Pessoas.get(i));
}
for (int i = 0; i < Pessoas_DepoisDe200.size(); i++) {
System.out.println("Nome:" + Pessoas_DepoisDe2000.get(i).getNome() + "\nDataNasc:" + Pessoas_DepoisDe2000.get(i).getDataNasc() + "\n\n");
}
OBS: Não testei o código. É apenas um exemplo, porém como disse não é um exemplo muito viável. Pois imagina se tiver mais de 100 mil registro.
Se toda vez tiver que percorrer esses 100 mil registro a aplicação pode ficar lerda.
Sem falar que dependendo a quantidade de registros o computador deve ter uma boa memória. E mesmo com uma boa memória é possível ter problemas com estouro de memória. (E claro toda vez que fechar a aplicação vai perde os registros. Pois eles estão somente na memória, mas pra resolver pode estar salvando em TXTs ou BD mas isso já é outra história)
O ideal mesmo é utilizar um BD se for o caso de muitos registros ou se for querer manter os registros mesmo após fechar a aplicação. Pois com BD você tem muito mais recursos e não vai forçar tanto processador(Deixando até mesmo a aplicação mais rápida).
Se não me engano tem como utilizar filter em ArrayList. Utilizando o filter não precisa ficar percorrendo as listas por completo.
Exemplos de filter aqui: http://stackoverflow.com/questions/9146224/arraylist-filter
Porém nunca cheguei a implementar um ArrayList com Filter então não sei te dizer como fazer ou se vai dar certo. Mas você pode estar pesquisando e descobrindo se realmente é possível utilizar Filter nesse caso.