ARTS 挑战打卡第九周(200706-200712)
Algorthm
https://leetcode.com/problems/two-sum-iv-input-is-a-bst
题目是给定一个值k,在BST里找是否有两个数字相加等于k。
思路:把找两个数字简化为找一个数字,从根节点开始,用k减去根节点的值,然后在左右子树里递归地找剩余的那个值。
Review
https://hackernoon.com/are-unit-tests-a-waste-of-your-time-ftw3umv
文章论述单元测试是否有必要,写单元测试是很费时间的一件事情,如果代码发生改动,还需要维护单元测试,有时候写单元测试的时间甚至比写代码的时间都要长,但是写单元测试是很有必要的。
写单元最好的时机就是写代码的时候,如果写代码的时候不写单元测试,那么之后可能永远都不会补上的。
写完代码后的选择:
完全不测试:这个不用说了,肯定会有很多问题,甚至饭碗都不保
直接交给测试人员手动测试:很快就会发现,本来可以很快被发现的问题,会在你跟测试人员间不断地出现。
自测保证:自测的话,也需要花很长的时间去发现问题,只是把写单元测试的时间换为一次次的点击。
单元测试值得花时间去写,因为自测的话,跑整个流程,往往有些场景会被忽略掉,所以自测是不够充分的。
自己的经验是:在写单元测试的时候,粒度越小的单元测试,越能维护代码的稳定。另外,如果一个函数的单元测试不好写,说明函数的粒度不够小,或者怀疑自己,代码是不是没写好,应该重新修改函数,将函数改为粒度更小一些或者把函数改为更清晰,更单一的,一个函数只做一件事。
Tip
1、Java中,List、Set、Map 之间的区别是什么?
List和Set都是继承自Collection。Map是哈希表的父类。
List中的元素是可重复的,是一个列表,Set和Map的元素是不可重复的。
List是有序的,每个节点都是有序地连接起来;Set和Map是无序的。Map有有序的实现(TreeMap),也有无序的实现(HashMap),也有添加顺序的实现(LinkedHashMap)。
List的常见实现类有AbstractList,其子类有ArrayList、LinkedList、Vector。
Set的常见实现类有AbstractSet,其子类有HashSet、LinkedHashSet、TreeSet。
Map的常见实现类有HashMap和HashTable。
List中,Vector是线程安全的;Map中,HashTable是线程安全的。
2、ArrayList 和 LinkedList 的区别是什么?
一个比较明显的区别是ArrrayList底层实现的数据结构是数组,支持随机访问;LinkedList底层实现的数据结构是双向循环链表,不支持随机访问。
使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。
往下标为0的位置增加元素,ArrayList的时间复杂度是O(n),而LinkedList是O(1)
Share
推荐文章-为什么TCP建立连接需要三次握手
原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。
如果本文对你有帮助,请点个赞吧,谢谢
版权声明: 本文为 InfoQ 作者【老胡爱分享】的原创文章。
原文链接:【http://xie.infoq.cn/article/74999654641c5b9d699df14b9】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论