269 votes

Comment imprimer tous les éléments d'une liste en Java?

J'essaie d'imprimer tous les éléments d'un List , mais le pointeur du Object affiché plutôt que la valeur.

Ceci est mon code d'impression ...

 for(int i=0;i<list.size();i++){
    System.out.println(list.get(i));
} 
 

Quelqu'un pourrait-il m'aider s'il vous plaît, pourquoi ne pas imprimer la valeur des éléments.

537voto

Holly Cummins Points 3149

Ce qui suit est compact et évite la boucle dans votre exemple de code (et vous donne de belles virgules):

 System.out.println(Arrays.toString(list.toArray()));
 

Cependant, comme d'autres l'ont fait remarquer, si vous n'avez pas implémenté de méthodes sensibles toString () pour les objets de la liste, vous obtiendrez les pointeurs d'objet (codes de hachage, en fait) que vous observez. Cela est vrai qu'ils soient dans une liste ou non.

127voto

Crazenezz Points 1388

Voici quelques exemples sur la façon d’imprimer le composant de liste:

 public class ListExample {

    public static void main(String[] args) {
        List<Model> models = new ArrayList<>();

        // Print the name from the list....
        for(Model model : models) {
            System.out.println(model.getName());
        }

        // Or like this...
        for(int i = 0; i < models.size(); i++) {
            System.out.println(models.get(i).getName());
        }
    }
}

class Model {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
 

121voto

Katja Hahn Points 156

Depuis Java 8, vous pouvez aussi utiliser des flux pour l’imprimer comme ceci:

 list.stream().forEach(e -> System.out.println(e));
 

15voto

K Mehta Points 5416

Les objets de la liste doivent avoir toString mis en œuvre pour eux d'imprimer quelque chose de significatif à l'écran.

Voici un test rapide pour voir les différences:

public class Test {

    public class T1 {
        public Integer x;
    }

    public class T2 {
        public Integer x;

        @Override
        public String toString() {
            return x.toString();
        }
    }

    public void run() {
        T1 t1 = new T1();
        t1.x = 5;
        System.out.println(t1);

        T2 t2 = new T2();
        t2.x = 5;
        System.out.println(t2);

    }

    public static void main(String[] args) {        
        new Test().run();
    }
}

Et lorsque cela s'exécute, les résultats de l'imprimé à l'écran sont:

t1 = Test$T1@19821f
t2 = 5

Depuis le T1 ne pas surcharger la méthode toString, son instance t1 imprime comme quelque chose qui n'est pas très utile. D'autre part, T2 remplace toString, nous avons donc contrôler ce qu'il imprime lorsqu'il est utilisé en I/O, et nous voyons quelque chose d'un peu mieux sur l'écran.

5voto

SamDev Points 299

Je pense que tout d'abord, vous devez comprendre ce qui se passe.

  1. Vous n'avez pas spécifié de quel type d'éléments de la liste contient, si c'est un type de données primitif ensuite, vous pouvez imprimer les éléments.
  2. Mais, si les éléments sont des objets alors que Kshitij Mehta dit que vous devez mettre en œuvre (override) la méthode "toString" dans cet objet - si ce n'est déjà mis en œuvre - et la laisser revenir à quelque chose de la signification complète de l'intérieur de l'objet, exemple:

    class Person {
        private String firstName;
        private String lastName;
    
        @Override
        public String toString() {
            return this.firstName + " " + this.lastName;
        }
    }
    

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X