谈谈最近做题心得
Java为什么直接打印输出集合不是哈希值而是直接输出值
Collection—AbstractCollection–AbstractList–ArrayList
在翻阅了源码之后发现ArrayList
的父类AbstractList
的父类AbstractCollection
里面有实现toString()
方法,所以打印出来的是内容不是堆栈地址。
在Object
类的toString()
方法中,返回的是 getClass().getName() + "@" + Integer.toHexString(hashCode())
也就是地址值,打印ArrayList
对象没有输出地址值,便可知道ArrayList
重写了toString()
方法。
Java如何打印数组
数组和集合并不同,如果直接System.out.println()
打印输出数组,则会显示地址值,而并不会输出内容。
- 使用
Arrays.toString()
将数组转成String再打印输出 - 使用
Arrays.deepToString()
可以把二维数组直接打印输出
Comparator的个人简单理解(升序降序)与使用
Java实现Comparator排序是升序,即自然排序,根据参数,返回值来判断是否交换。
jdk官方的升序基于:
1 | < return -1 |
把-1理解为false,1理解为true(实际上底层源码并不是这样,实现原理参考dalao的博客,只是为了方便记忆使用)
如果要升序:那么a<b就是想要的顺序,所以return -1 ,false,不交换
如果要降序:那么a<b就是不想要的顺序,所以return 1,true,要交换
简而言之,返回1的时候进行位置交换
示例
1 | /** |
以上就是最近的感悟了,算法还得继续刷,数据结构还不够熟悉。