Java Collection 中的 Vector 如何在内部工作,以便它可以接受任何类型的 Objects
4 回答
在内部,Vector 只是将对象存储为 Object 类型。因为所有对象都继承自Object,所以它可以存储所有对象。
然而,原始值(例如 int 和 double)并不从 Object 继承,因为它们不是对象。为了应对它们,Java 将根据需要将它们从原始值动态转换为对象。所以 int 5 将被转换为持有 5 的 Integer 对象,而 double 4.3 将被转换为持有 4.3 的 Double 对象。这称为自动装箱。
Java 也会自动为您执行相反的操作,从 Integer 转换为 int。这被称为“拆箱”。
这样它就可以存储任何对象,但是当您使用 Vector 进行编码时,您可以更加具体。例如向量或向量。对可以在 Vector 中存储的内容的这种限制是使用“泛型”实现的,它允许您将类型作为参数传递给类。在这些示例中,参数是字符串和整数。
然而,泛型仅在编译时强制执行;在运行时,Vector 将继续在内部使用 Object。
这意味着当您的应用程序运行时,Vector 和 Vector 之间没有区别。它们完全相同,实际上只有 Vector(没有 Vector 或 Vector 真的存在)。它们之间的区别完全在于编译时,在应用程序运行之前,使用 Vector,只有在其中只存储 String 对象时它才会编译。
它的工作原理是多态性,这是 Java 等面向对象语言中的一个关键思想,也是面向对象编程的四大支柱之一。
Vector 是Object的集合类型,由于 Java 中的所有类都继承自 Object,Vector 可以接受任何类型的对象。
- 向量的初始容量为 10。
- 我们可以为 Vector 定义 capacityincrement ,如果我们没有定义 capacityIncrement ,在这种情况下,Vector grow() 将加倍。
- 所有方法都是同步的,因此存在线程安全性。
- 返回此向量的组件的枚举
- 与 ArrayList 相比,性能较慢
Vector 的工作方式与 List 相同。Vector的唯一不同的it方法是同步的,而对于List,同步是程序员的责任。