【问题标题】:What is difference in returning element using it.next() and directly printing the object of hash set in sysout使用 it.next() 返回元素和直接在 sysout 中打印散列集的对象有什么区别
【发布时间】:2020-06-16 21:34:45
【问题描述】:

在 hashset 中,我可以打印使用 sysout 的 obj 名称添加的对象,也可以通过迭代和返回元素来打印。有什么区别?两者都给出了存储在哈希集中的对象。

下面是代码:

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);



}

【问题讨论】:

  • System.out.println(hs); 内部调用 hs.toString(),它只显示集合的内容。使用it.next(),您实际上是在访问特定对象。
  • 为什么你认为有区别?

标签: java hash collections iterator hashset


【解决方案1】:

运行下面的代码,看看能否从 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 所说,您可以使用迭代器访问特定对象。

【讨论】:

    猜你喜欢
    • 2020-05-07
    • 2016-06-28
    • 2012-07-16
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多