Java中的向量选项

Java中的向量选项,java,Java,我用的是物体的矢量。我的问题是,从向量中删除是一个昂贵的操作(O(n^2))。在Java中,向量的替换是什么。在我的使用中,添加和删除是经常发生的 我是C++人,不太懂java,/p> < p>可以在java中使用ARARYLAMP代替矢量。 < P> >,不应该使用向量类。Java中有很多可用的容器。其中很少有人: ArrayList适用于随机访问,但不适用于从列表中间插入或删除 LinkedList不利于随机访问,但对于迭代和从容器中间添加/删除元素非常有用。查看本文: LinkedLis

我用的是物体的矢量。我的问题是,从向量中删除是一个昂贵的操作(O(n^2))。在Java中,向量的替换是什么。在我的使用中,添加和删除是经常发生的


<>我是C++人,不太懂java,/p> < p>可以在java中使用ARARYLAMP代替矢量。

< P> >,不应该使用向量类。Java中有很多可用的容器。其中很少有人:

ArrayList
适用于随机访问,但不适用于从列表中间插入或删除


LinkedList
不利于随机访问,但对于迭代和从容器中间添加/删除元素非常有用。

查看本文:


LinkedList可以在O(1)添加/删除项首先,向量删除时间复杂度是O(n)而不是O(n^2)。如果你想要更高性能的类,你应该选择LinkedList。它的时间复杂度是恒定的

对于您的用例,列表可能不是理想的数据结构-如果元素的顺序不重要,您是否最好使用哈希集?

事实上,
Vector
ArrayList
之间的区别在于
Vector
是同步的,而
ArrayList
不是。通常,您不需要同步,因此可以使用
ArrayList
(很像
StringBuffer
StringBuilder

更换主要取决于您打算如何使用该系列

将对象添加到
ArrayList
非常快,因为如果需要更多的空间,通常会加倍,如果您事先知道大小要求,效果会更好

ArrayList
中删除是O(n),但迭代和随机访问速度很快

如果您经常进行添加或删除操作,或者在列表上进行迭代,则可以使用
LinkedList

您甚至可以考虑使用<代码> LinkedHashMap <代码>,它允许快速访问,并保留插入顺序。


我认为,向量使用System.arrayCopy,其复杂性为O(n^2)

正确的做法是,
Vector
将使用
System.arrayCopy
移动元素。但是,
System.arrayCopy()
调用最多复制
Vector.size()
元素,因此是
O(N)
,其中
N
是向量的大小

因此,
O(N^2)
对于单个插入/移除是不正确的


事实上,如果您想要比
O(N)
更好的插入和删除,您将需要使用某种带有光标抽象的链表类型,允许在“当前位置”插入和删除。即使如此,如果你能以正确的顺序进行插入/删除,你也只能比
O(N)
更好;i、 不是随机顺序


FWIW,Java
List
api没有提供这样的游标机制。。。不仅仅是因为它使用起来很笨拙,而且只有在某些情况下/实现时才有效。

感谢大家的贡献,帮助我解决了这个问题。我使用了一个循环队列,它是借助向量编写的

您关于
删除操作运行时的信息是错误的。除此之外,使用
ArrayList
而不是
Vector
。ArrayList在添加和删除时的行为是什么?@Saurabh01与
Vector
相同–基本相同,但没有无用的同步
Vector
在很大程度上已经过时,并已被
ArrayList
取代。正如我所说,
remove
的运行时是线性的,所以它比O(n^2)好得多。@Saurabh:为什么你要“大量地添加和删除”。我可以知道谁在向量中添加和删除。它试图实现什么样的业务逻辑。你能从你的集合中添加更多关于你需要什么的信息吗?是否需要对其进行迭代并删除项目?您是否也添加了?你在乎秩序吗?访问项目是否需要O(1)?还是O(n)好?也许集合/映射更适合您?我想,Vector使用System.arrayCopy的复杂性是O(n^2)。我正在使用它添加积分数据类型以及一些自定义对象。我还想保留插入的顺序。我事先不知道大概的大小。所以你有一个对象列表,可以是任何类型的?嗯,那是个危险的设计。你能给我看看代码吗?