Arraylist 与 LinkedList 异同
- ArrayList与LinkedList均线程不安全。
- ArrayList实现了RandomAccess接口,LinkedList没有实现RandomAccess接口。原因:与底层数据结构有关,ArrayList底层是数组,数组天生支持随机访问,时间复杂度为O(1),链表需要遍历到特定位置才能访问到特定元素,时间复杂度为O(n)。
List遍历方式的选择
- 实现RandomAccess接口的List,优先选择普通for循环,其次选择foreach循环
- 未实现RandomAccess接口的List,优先选择iterator遍历(foreach循环的底层也是使用的iterator实现的),大size的数据,千万不要使用普通的for循环。
ArrayList与Vector的区别
Vector所有的方法都是同步的。可以由两个线程安全的访问一个Vector对象,但是一个线程访问Vector对象的话要在同步操作上浪费大量时间。
不要求线程安全的情况下尽量使用ArrayList。
HashSet如何检查重复
当你把对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,同时也会与其他加入的对象的hashcode值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同hashcode值的对象,这时会调用equals()方法来检查hashcode相等的对象是否真的相同。如果两者相同,HashSet就不会让加入操作成功。

网友评论