数组列表和向量这两种数据结构之间有什么区别,你应该在哪里使用它们?
当前回答
差异
向量是同步的,数组列表 不是。 数据增长方法
如果对vector没有特殊要求,请使用数组列表。
同步
如果多个线程同时访问一个数组列表,那么我们必须从外部同步修改列表结构或简单修改元素的代码块。结构修改是指从列表中添加或删除元素。设置现有元素的值不是结构修改。
集合。synchronizedList通常在创建列表时使用,以避免对列表的任何意外非同步访问。
数据增长
在内部,ArrayList和Vector都使用Array保存它们的内容。当一个元素被插入到一个数组列表或Vector对象中时,如果它的空间不足,对象将需要扩展它的内部数组。Vector默认将其数组大小增加一倍,而ArrayList则将其数组大小增加50%。
其他回答
基本上ArrayList和Vector都使用内部对象数组。
ArrayList: ArrayList类扩展了AbstractList并实现了List接口和RandomAccess(标记接口)。ArrayList支持动态数组,可以根据需要增长。它给出了元素的第一次迭代。 ArrayList使用内部对象数组;它们的默认初始大小为10。当超过这个大小时,集合将自动增加到默认大小15的一半。
Vector: Vector is similar to ArrayList but the differences are, it is synchronized and its default initial size is 10 and when the size exceeds its size increases to double of the original size that means the new size will be 20. Vector is the only class other than ArrayList to implement RandomAccess. Vector is having four constructors out of that one takes two parameters Vector(int initialCapacity, int capacityIncrement) capacityIncrement is the amount by which the capacity is increased when the vector overflows, so it have more control over the load factor.
其他一些区别是:
差异
向量是同步的,数组列表 不是。 数据增长方法
如果对vector没有特殊要求,请使用数组列表。
同步
如果多个线程同时访问一个数组列表,那么我们必须从外部同步修改列表结构或简单修改元素的代码块。结构修改是指从列表中添加或删除元素。设置现有元素的值不是结构修改。
集合。synchronizedList通常在创建列表时使用,以避免对列表的任何意外非同步访问。
数据增长
在内部,ArrayList和Vector都使用Array保存它们的内容。当一个元素被插入到一个数组列表或Vector对象中时,如果它的空间不足,对象将需要扩展它的内部数组。Vector默认将其数组大小增加一倍,而ArrayList则将其数组大小增加50%。
ArrayList更新,速度快20-30%。
如果你不需要在Vector中显式地使用一些东西,请使用ArrayList
As the documentation says, a Vector and an ArrayList are almost equivalent. The difference is that access to a Vector is synchronized, whereas access to an ArrayList is not. What this means is that only one thread can call methods on a Vector at a time, and there's a slight overhead in acquiring the lock; if you use an ArrayList, this isn't the case. Generally, you'll want to use an ArrayList; in the single-threaded case it's a better choice, and in the multi-threaded case, you get better control over locking. Want to allow concurrent reads? Fine. Want to perform one synchronization for a batch of ten writes? Also fine. It does require a little more care on your end, but it's likely what you want. Also note that if you have an ArrayList, you can use the Collections.synchronizedList function to create a synchronized list, thus getting you the equivalent of a Vector.
Vector是一个破碎的类,它不是线程安全的,尽管它是“同步的”,而且只被学生和其他没有经验的程序员使用。
ArrayList是专业人员和有经验的程序员使用的List实现。
专业人士想要一个线程安全的列表实现使用CopyOnWriteArrayList。
推荐文章
- 到底是什么导致了堆栈溢出错误?
- 为什么Android工作室说“等待调试器”如果我不调试?
- Java:路径vs文件
- ExecutorService,如何等待所有任务完成
- 连接两个向量的最佳方法是什么?
- Maven依赖Servlet 3.0 API?
- 如何在IntelliJ IDEA中添加目录到应用程序运行概要文件中的类路径?
- getter和setter是糟糕的设计吗?相互矛盾的建议
- Android room persistent: AppDatabase_Impl不存在
- Java的String[]在Kotlin中等价于什么?
- Intellij IDEA上的System.out.println()快捷方式
- 使用Spring RestTemplate获取JSON对象列表
- Spring JPA选择特定的列
- URLEncoder不能翻译空格字符
- Java中的super()