A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. HashSet<String> hs = new HashSet<String>();
  2.                 hs.add("hashset");
  3.                 System.out.println(hs);
  4.                
  5.                 System.out.println("--------");
  6.                
  7.                 HashMap<String,String> hm = new HashMap<String,String>();
  8.                 hm.put("hashmap", "");
  9.                 System.out.println(hm);
  10.                
复制代码
HashSet输出是[],中括号
HashMap输出是{},大括号
[hashset]
--------
{hashmap=}

谁帮忙解释一下,谢谢!

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
我感觉这应该是它们的toString方法不一样的缘故,你如果重写toString方法也可以按照你想要的方式输出。
回复 使用道具 举报
依然超级赛亚人 发表于 2014-9-27 22:51
我感觉这应该是它们的toString方法不一样的缘故,你如果重写toString方法也可以按照你想要的方式输出。 ...

集合分为3种,List、Set、Map。。前面2种存储数据跟数组类似,只能同时存一种,所以用[ ]表示类似数组,而后面那种是映射关系,是以成对出现的,跟数组完全不一样,所以以是区分就用{ }了。这可能是一种代码规范吧。。。HashMap继承自AbstractMap,AbstractMap实现了Map....


刚问的一个学的比较好的同学,他给的说法
回复 使用道具 举报
翻了下源码
hashSet里的toString方法是继承自AbstractCollection,里面重写了toString方法
public String toString() {
        Iterator<E> it = iterator();
        if (! it.hasNext())
            return "[]";

        StringBuilder sb = new StringBuilder();
        sb.append('[');
        for (;;) {
            E e = it.next();
            sb.append(e == this ? "(this Collection)" : e);
            if (! it.hasNext())
                return sb.append(']').toString();
            sb.append(',').append(' ');
        }
    }
hashMap里的toString继承自AbstractMap,里面重写了toString
public String toString() {
        Iterator<Entry<K,V>> i = entrySet().iterator();
        if (! i.hasNext())
            return "{}";

        StringBuilder sb = new StringBuilder();
        sb.append('{');
        for (;;) {
            Entry<K,V> e = i.next();
            K key = e.getKey();
            V value = e.getValue();
            sb.append(key   == this ? "(this Map)" : key);
            sb.append('=');
            sb.append(value == this ? "(this Map)" : value);
            if (! i.hasNext())
                return sb.append('}').toString();
            sb.append(',').append(' ');
        }
    }

点评

谢谢大神!  发表于 2014-9-28 11:13
回复 使用道具 举报 1 0
Systen.out.println()    输出之前会调用对象的toString()方法,HashSet与HashMap的toString方法是不同的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马