Какая разница в возврате элемента с помощью it.next () и прямой печати объекта ha sh, установленного в sysout - PullRequest
0 голосов
/ 04 марта 2020

В hashset я могу печатать объекты, добавленные с помощью sysout с именем obj, а также путем итерации и возврата элементов. в чем разница? оба дают объекты, хранящиеся в наборе ha sh.

Ниже приведен код:

public static void main(String[] args) {


    HashSet<Integer> hs= new HashSet<Integer>();

    hs.add(12);
    hs.add(234);



    Iterator<Integer> it = hs.iterator();

    while(it.hasNext())
    {
        System.out.println(it.next());
    }
    System.out.println(hs);



}

1 Ответ

0 голосов
/ 04 марта 2020

Запустите приведенный ниже код и посмотрите, можете ли вы получить имя из пользовательского класса в sysout

package io.eshu.test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class TestRandom {

    public static void main(String ad[]) {

        MyClass e = new MyClass();
        e.setName("Test");

        Set<MyClass> c = new HashSet<>();
        c.add(e);

        System.out.println(c);

        Iterator<MyClass> its = c.iterator(); 
        while(its.hasNext()) 
        { 
            System.out.println(its.next().getName()); 
        }
    }
}
class MyClass{
    String name;

    public String getName() {
        return name;
    }

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

Печать набора в sysout дает вам объект, но в случае класса-оболочки вы получаете значение, но с классом, где метод toString не является реализовано, вы получите объект хеш-код в выводе. В этом разница, и, как сказал @Amongalen, вы можете получить доступ к указанным c объектам с помощью итератора.

...