我也是刚学,说说自己的见解不要见笑。。
首先考虑List和Set的选择,简单说来最关键的因素就是List中元素是可以重复的,而Set是不能重复的。
其次,List适合经常性的追加和删除数据,缺点就是随机取数效率低。而Set就适合经常地随机储存,插入和删除数据,但他的缺点就是在遍历时效率较低。
接下来应该可以考虑他们实现类的选择了:
List的实现类:
ArryList是靠数组来实现的,他具有能够快速访问的特点,他适用于存在大量随机访问的情况。
LinkedList是靠双向链表实现的,所以插入和删除操作相对代价要低,如果需要大量插入删除操作就可以用他。
再来看Set的实现类:
HashSet底层是依靠一个Hash表,他的特点就是查询速度非常快,存储效率高,需要重写hashCode()方法。
TreeSet底层则是平衡二叉树实现,而且元素必须实现Comparable接口,所以他的特点就是能输出有序的元素序列。
简单来说,HashSet读写高效但不排序,TreeSet效率没HashSet高,但可以排序。
纯属个人理解。。希望别的同学也参加讨论,指出错误。。 |