1、比较HashSet、LinkedHashSet、TreeSet的异同
同:都是set的实现类,都能保证元素唯一,都是线程不安全的
异:
HashSet基于哈希表(HashMap),不需要保证插入和取出的顺序。
LinkedHashSet基于链表和哈希表(LinkedHashMap),元素的插入和取出顺序满足FIFO。
TreeSet基于红黑树,元素可以自然排序或者定制排序。
2、ArrayList插入或删除的时间复杂度
- 插入:
头插:都得往后移,O(n)
尾插:当容量不是极限,O(1),
当容量极限,首先扩容并将原数组复制到新数组中O(n),再O(1)
指定位置插入:平均是O(n/2),所以是O(n)
- 删除:
头删:都得往前移,O(n)
尾删:O(1)
指定删:平均O(n/2),所以是O(n)