java中vector是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中vector是啥?相关的知识,希望对你有一定的参考价值。

与 ArrayList 有什么区别?

Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。 每个向量会试图通过维护 capacity 和 capacityIncrement 来优化存储管理。capacity 始终至少应与向量的大小相等;这个值通常比后者大些,因为随着将组件添加到向量中,其存储将按 capacityIncrement 的大小增加存储块。应用程序可以在插入大量组件前增加向量的容量;这样就减少了增加的重分配的量。 由 Vector 的 iterator 和 listIterator 方法所返回的迭代器是快速失败的:如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的 remove 或 add 方法之外的任何其他方式),则迭代器将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就完全失败,而不是冒着在将来不确定的时间任意发生不确定行为的风险。Vector 的 elements 方法返回的 Enumeration 不是 快速失败的。 注意,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何坚决的保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常的程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测 bug。 参考技术A Vector是一个数组,与ArrayList最大的区别是Vector当成员超出范围它自增长时每次自增长自身长度的一倍。而ArrayList每次自增长自身长度的一半。 参考技术B 存储数据的容器啊,类似数组,和ArrayList相比,Vector是线程安全的。 参考技术C import java.util.Enumeration;
import java.util.Vector;

/*
 * Vector的特有功能:
 * 1:添加功能
 *  public void addElement(Object obj) -- add()
 * 2:获取功能
 *  public Object elementAt(int index) --  get()
 *  public Enumeration elements() -- Iterator iterator()
 *  boolean hasMoreElements() hasNext()
 *  Object nextElement() next()
 * 
 * JDK升级的原因:
 *  A:安全
 *  B:效率
 *  C:简化书写
 */
public class VectorDemo 
public static void main(String[] args) 
// 创建集合对象
Vector v = new Vector();

// 添加功能
v.addElement("hello");
v.addElement("world");
v.addElement("java");

// 遍历
for (int x = 0; x < v.size(); x++) 
String s = (String) v.elementAt(x);
System.out.println(s);


System.out.println("------------------");

Enumeration en = v.elements(); // 返回的是实现类的对象
while (en.hasMoreElements()) 
String s = (String) en.nextElement();
System.out.println(s);


参考技术D 是一个集合 啊,与ArrayLIst不同的是他保存数据是以键值对的方式保存的,而且与线程同步的集合类型

meta.Vectors 背后的黑魔法是啥?

【中文标题】meta.Vectors 背后的黑魔法是啥?【英文标题】:what is dark magic behind meta.Vectors?meta.Vectors 背后的黑魔法是什么? 【发布时间】:2021-07-21 17:51:38 【问题描述】:

在实现了一些基于通用算法和迭代器的向量代数之后,我决定运行一些基准测试。想法是将自定义向量的性能与meta.Vectors 的性能(进行加法和缩放)进行比较。

当向量的大小设置为 10 时,自定义向量的性能略优于 meta.Vectors。当向量的大小设置为 100 时,meta.Vectors 的性能略优于自定义向量。当向量的大小设置为 1000 时,自定义向量执行加法和缩放的速度是 meta.Vectors 的两倍 - 比 meta.Vectors 稍慢(使用 @splat)。

最有趣的是编译时间——那些随着向量大小的增长而增长(没有测量,无法判断编译时间是否与向量大小成线性关系)。当向量的大小设置为 10_000 时,我最终(经过漫长的等待)收到了 shell returned 137 错误消息(在编译期间);在我注释掉任何提及meta.Vector 之后,代码编译得很好。

所以我的问题是,什么样的(编译器?)黑魔法使 1000 大小的 meta.Vectors 工作得如此之快,我可以用它来使我的代码更快吗?

P。 S.:使用 -O ReleaseFast 运行基准测试,所有变量都标记为var

P。 P.S.:在调试模式下,最终编译了 10_000 大小的 meta.Vectors 代码

【问题讨论】:

【参考方案1】:

AFAIK 所做的只是明确利用 LLVM 的 SIMD 支持。

https://ziglang.org/documentation/0.8.0/#Vectors

【讨论】:

以上是关于java中vector是啥?的主要内容,如果未能解决你的问题,请参考以下文章

java中的vector 是啥意思呢

java 里的,vector是啥? 起到啥用,何时才会用到??

Java中的Vector是啥意思?

c++中vector的作用是啥?

std::vector 在内存中是啥样的?

c ++在std :: vector中存储逗号分隔的最快方法是啥