您的位置:首页 > 其它

关于输出集合深度层次的一些理解(仅供参考,可能理解的不对)

2018-03-15 21:45 309 查看
一直很纳闷 为什么 每次输出自定义对象输出的就是所有的属性和属性值,而输出集合却只输出了集合中 用来存放元素的那个数组的值,后来我想肯定是toString()的问题,看了AbstractCollection中toString()的源码,发现toString是从iterator的next()拿的值,然后又找到了AbstractList&Itr 这个类,发现AbstractList中Iteritor()方法返回的是一个Itr对象,然后又看了一眼Itr的next()方法,发现每调用一次next方法,它就会调用get方法来获取指定索引位元素的值,get方法底层是通过for循环拿的。最终我理解之所以打印集合只拿出它的一个属性值 是因为他的最底层是通过遍历这个数组然后拿到指定元素,通过get()方法它就能利用for循环拿到这个元素,然后next()内部是调用get的。toString里面又是通过迭代器的next来拿值,然后拼接成字符串的。所以迭代器迭代出来值都是通过for循环遍历存放元素的数组拿来的。这也就不难理解为什么输出集合仅仅是集合中的一个属性的值了。

本人属于小白,以上解释仅供参考,如有错误,欢迎提出。 看源码看晕乎了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: