• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

victorhugozm

ArrayList, como funciona???

2 mensagens neste tópico

Olá, sou do Brasil e gosto muito desse Fórum português e estou com um problema.

Eu tenho um código de um leitor de RSS e o gerenciamento é feito usando ArrayList<Feed>. Só que nunca nem ouvi falar disso. Alguém poderia me explicar como funciona essa função?

Também não entendi muito bem o código, gostaria de pedir para alguém me explica certinho como ele funciona. Agradeço desde já a todos.

package rss;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

/**
*
* @author Victor
*
*/
public class FeedManager {

    private Feed feedAtual = null;

    
    // guarda a lista de feeds
    private ArrayList<Feed> arrayFeed = new ArrayList<Feed>();
    // modelos para a atualização das JLists
    private javax.swing.DefaultListModel modelo_feeds = new javax.swing.DefaultListModel();
    private javax.swing.DefaultListModel modelo_noticias = new javax.swing.DefaultListModel();
    

    public FeedManager(){

    }
    
    public Feed getFeedAtual() {
        return feedAtual;
    }

    public void setFeedAtual(Feed aFeedAtual) {
        feedAtual = aFeedAtual;
    }
    
    public ArrayList<Feed> getArrayFeed() {
        return arrayFeed;
    }

    public void setArrayFeed(ArrayList<Feed> arrayFeed) {
        this.arrayFeed = arrayFeed;
    }

    public javax.swing.DefaultListModel getModelo_feeds() {
        return modelo_feeds;
    }

    public void setModelo_feeds(javax.swing.DefaultListModel modelo_feeds) {
        this.modelo_feeds = modelo_feeds;
    }

    public javax.swing.DefaultListModel getModelo_noticias() {
        return modelo_noticias;
    }

    public void setModelo_noticias(javax.swing.DefaultListModel modelo_noticias) {
        this.modelo_noticias = modelo_noticias;
    }
    
    public void carregarDados(){
       String filename = "feeds.txt";
        setArrayFeed(null);
       FileInputStream fis = null;
       ObjectInputStream in = null;
       
       try {
 fis = new FileInputStream(filename);
 in = new ObjectInputStream(fis);
    setArrayFeed((ArrayList<Feed>) in.readObject());
 in.close();
       } 
       catch(IOException ex){
 javax.swing.JOptionPane.showMessageDialog(null, "Não foi possível ler os dados: " + ex.getMessage());
       } catch (ClassNotFoundException ex) {
 javax.swing.JOptionPane.showMessageDialog(null, "Não foi possível carregar os dados: " + ex.getMessage());
       }
    }
    
    public void gravarDados(){
      // gravar dados da ArrayList
      String filename = "feeds.txt";
      FileOutputStream fos = null;
      ObjectOutputStream out = null;
      try {
        fos = new FileOutputStream(filename);
        out = new ObjectOutputStream(fos);
        out.writeObject(getArrayFeed());
        out.close();
      }
      catch(IOException ex){
        javax.swing.JOptionPane.showMessageDialog(null, "Não foi possível gravar os dados: " + ex.toString());
      }
    }
    
    public void actualizarJListFeed(javax.swing.JList lista){
        getModelo_feeds().removeAllElements();
        
        // percorre todas as Feeds no ArrayList
        for(int i = 0; i < getArrayFeed().size(); i++){
            Feed feed = getArrayFeed().get(i);
            getModelo_feeds().addElement(feed.getNome());
        }
        
        lista.setModel(getModelo_feeds());
    }
    
    public void actualizarJListNoticias(javax.swing.JList lista){
       lista.setModel(getModelo_noticias());
    } 
    
    public void inserirNovoFeed(Feed novoFeed){
       FeedReader feedReader = new FeedReader();
       
       Feed feed = feedReader.NovoFeed(novoFeed); 
       
       if(feed == null){
          javax.swing.JOptionPane.showMessageDialog(null, "Não foi possível carregar o feed");
       }
       else{
            getArrayFeed().add(feed);
         gravarDados();
       }
    }
    
    // método para excluir Feed
    public void excluirFeed(String valor, javax.swing.JList lista){
       int status = javax.swing.JOptionPane.showConfirmDialog(null, "Deseja mesmo excluir este Feed?", "Excluir", javax.swing.JOptionPane.YES_NO_OPTION);
       if(status == javax.swing.JOptionPane.YES_OPTION){
         //procurar um Feed com este nome
         Feed feed = null;
   
         for(int i = 0; i < getArrayFeed().size(); i++){
           feed = getArrayFeed().get(i);
           if(feed.getNome().equals(valor)){
             // encontramos....vamos remover
                    getArrayFeed().remove(i);
             // limpa a JList de notícias
                    getModelo_noticias().removeAllElements();
             lista.setModel(getModelo_noticias());
             
             // salva os dados
             gravarDados();
             carregarDados();
             break;
           }
         }
       } 
    }
    
    public void carregarNoticiasFeed(String valor){
       // vamos procurar um Feed com este nome
       for(int i = 0; i < getArrayFeed().size(); i++){
         Feed feed = getArrayFeed().get(i);
         
         if(feed.getNome().equals(valor)){
                setFeedAtual(getArrayFeed().get(i)); // novo feed
                getModelo_noticias().removeAllElements();
         
           ArrayList<Noticias> noticias = getFeedAtual().getNoticias();
           
           for(int x = 0; x < noticias.size(); x++){
              Noticias noticia = noticias.get(x);
                    getModelo_noticias().addElement(noticia.getTitulo());
           }
           break;
         }  
      }
   }
    
   public String carregarNoticia(String titulo){
       // vamos procurar uma noticia com este titulo
       ArrayList<Noticias> noticias = getFeedAtual().getNoticias();
       Noticias noticia = null;
       
       for(int i = 0; i < noticias.size(); i++){
         noticia = noticias.get(i);
         if(noticia.getTitulo().equals(titulo)){
            break;   
         }
       }
       
       if(noticia == null)
         return "Não foi possível carregar a notícia.";
       else
         return noticia.getConteudo();
   }

    
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tendo tempo, neste momento, para te explicar o código, posso deixar umas luzes sobre a construção "ArrayList<Feed>".

Existe mais sobre isto, mas de forma simples estão a ser usados genéricos, algo introduzido no Java 5, que permite dizer de que tipo são os dados que estão guardados numa lista, ou outra estrutura.

Antes dos genéricos, ou se não usares genéricos, ao criares uma lista podes colocar qualquer objecto dentro dela, podes misturar String com Integer com Double ou com objectos criados por ti, tudo na mesma lista. Isso, embora útil e com utilização prática, coloca também alguns problemas, um dos mais evidentes será como identificar os elementos que estão dentro da lista, não havia forma simples de identificar os elementos.

Com  o uso de genéricos passas a dizer que elementos podem estar em determinada estrutura, assim uma lista que seja declarada como contendo objectos do tipo Double não irá poder conter objectos do tipo String, apenas Double e alguma subclasse que exista. No caso da classe Double não existem mas noutras classes poderão existir.

ArrayList<Feed> significa que dentro desta lista, que é uma lista que usa um vector como sistema de armazenamento, só poderão ser colocados objectos do tipo Feed e seus descendentes. Qualquer outro objecto que tentes colocar será considerado um erro e o compilador irá queixar-se.

Embora o genéricos não tenham sido criados para dizermos qual o tipo de dados que guardamos em estruturas, esse é, dos seus efeitos práticos, aquele que mais notamos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora