分析&回答
常用的数据结构主要为Collection和Map接口衍生出的如下结构:
- List----->( ArryList \ LinkedList )
- Set------>( TreeSet\HashSet )
- Map----->( TreeMap\HashMap )
ArrayList: 是一个动态数组,擅长随机访问,使用数组存储,查询效率会高一些,因为是连续的地址,ArrayList要移动数据,所以插入和删除的时候效率较低。
LinkList: 基于链表的数据结构,所以在开辟内存空间上不需要连续的地址,对于添加或者删除新的节点,效率会高一些,LinkList适用于要头尾操作或者指定位置的产插入或者删除的场景,继而,因为LinkList需要移动指针,所以查询效率会更底一些。
TreeSet: 是二叉树(红黑树的数据结构)实现的,其数据是排好序的,不允许加入空值。
HashSet: 是哈希表实现的,HashSet中的数据是无序的,可以放入空值,但是只能放入一个空值,两者中的值都不能重复,就如同数据库主键约束一样。HashSet要求放入的对象必须实现HashCode方法,放入的对象,是以hashcode码作为标志的。hashset是基于hash算法实现的,查询效率要明显高于treeset,而如果需要排序的时候,才使用treeSet。
TreeMap: 基于红黑树实现的,没有调优选项,因为该树总是处于平衡状态的。
HashMap: 基于Hash表实现,使用HashMap要求添加的键类明确定义了hashCode和equals方法。
反思&扩展
请问 ArrayList 和 LinkedList 的区别?
喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!