三者都实现了集合框架中的List,也就是所谓的有序集合,都提供按照位置进行定位、添加或者删除操作,都提供迭代器遍历内容
Vector是java早期提供的线程安全的动态数组,如果不需要线程安全,不建议选择,毕竟同步是有额外开销的。内部使用数组来保存数据,根据需要自动扩容(创建新的数组,拷贝原有数组),每次增加一倍
ArrayList是应用更加广泛的动态数组实现,本身不是线程安全的,所以性能要好很多,可以根据需要扩容,每次增加50%
LinkedList顾名思义是java提供的双向链表,不需要调整容量,也不是线程安全的。
补充
• Vector和ArrayList比较适合随机访问(通过index下标访问,行为类似数组的访问),在中间插入数据的话,性能会比较差
• LinkedList在进行节点插入和删除的时候,比较高效,随机访问性能慢
所以在使用过程中,要注意两点,一个是线程安全问题,一个是插入多还是随机访问多。
整体集合
image.png• List,有序集合,提供方便的访问、插入、删除
• Set,不允许重复元素,
• Queue/Deque,标准队列结构,支持先入先出和后入先出等特定行为
Set
• TreeSet支持自然访问,但是添加、删除包含等操作比较低效
• HashSet是利用哈希算法,无序
• LinkedHashSet内部构建了一个记录插入顺序的双向链表,因此提供了按照插入顺序遍历的能力,
• 在遍历元素的时候,hashset性能受自身容量影响,所以初始化的时候,除非有必要,不然不要将其背后的HashMap容量设置过大。而对于LinkedHashSet由于内部链表提供方便,遍历性能和元素多少有关
网友评论