Vector主要用来保存各种类型的对象(包括相同类型和不同类型的对象)。但是在一些情况下使用会给程序带来性能上的影响。这主要是由Vector类的两个特点所决定的。第一,Vector提供了线程的安全保护功能。即使Vector类中的许多方法同步。但是如果你已经确认你的应用程序是单线程,这些方法的同步就完全不必要了。第二,在Vector查找存储的各种对象时,常常要花很多的时间进行类型的匹配。而当这些对象都是同一类型时,这些匹配就完全不必要了。因此,有必要设计一个单线程的,保存特定类型对象的类或集合来替代Vector类.用来替换的程序如下(StringVector.java):
public class StringVector {
private String[] data;
private int count;
public StringVector() {
this(10); // default size is 10
}
public StringVector(int initialSize) {
data = new String[initialSize];
}
public void add(String str) {
// ignore null strings
if (str == null) {
return;
}
ensureCapacity(count + 1);
data[count++] = str;
}
private void ensureCapacity(int minCapacity) {
int oldCapacity = data.length;
if (minCapacity > oldCapacity) {
String oldData[] = data;
int newCapacity = oldCapacity * 2;
data = new String[newCapacity];
System.arraycopy(oldData, 0, data, 0, count);
}
}
public void remove(String str) {
if (str == null) {
return; // ignore null str
}
for (int i = 0; i < count; i++) {
// check for a match
if (data[i].equals(str)) {
System.arraycopy(data, i + 1, data, i, count - 1); // copy data
// allow previously valid array element be gc'd
data[--count] = null;
return;
}
}
}
public final String getStringAt(int index) {
if (index < 0) {
return null;
} else if (index > count) {
return null; // index is > # strings
} else {
return data[index]; // index is good }
}
}
}
因此,代码:
Vector Strings=new Vector();
Strings.add(“One”);
Strings.add(“Two”);
String Second=(String)Strings.elementAt(1);
可以用如下的代码替换:
StringVector Strings=new StringVector();
Strings.add(“One”);
Strings.add(“Two”);
String Second=Strings.getStringAt(1);
这样就可以通过优化线程来提高JAVA程序的性能。用于测试的程序如下(TestCollection.java):
import java.util.Vector;
public class TestCollection {
public static void main(String[] args) {
TestCollection collect = new TestCollection();
collect.main1("stringvector");
}
public void main1(String ...args) {
if (args.length == 0) {
System.out
.println("Usage: java TestCollection [ vector | stringvector ]");
System.exit(1);
}
if (args[0].equals("vector")) {
Vector store = new Vector();
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
store.addElement("string");
}
long finish = System.currentTimeMillis();
System.out.println((finish - start));
start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
String result = (String) store.elementAt(i);
}
finish = System.currentTimeMillis();
System.out.println((finish - start));
} else if (args[0].equals("stringvector")) {
StringVector store = new StringVector();
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
store.add("string");
}
long finish = System.currentTimeMillis();
System.out.println((finish - start));
start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
String result = store.getStringAt(i);
}
finish = System.currentTimeMillis();
System.out.println((finish - start));
}
}
}
/* * * * * * * * * * * * * * * *TestCollection.java * * * * * * * * * * * * * * * * */
测试的结果如下(假设标准的时间为1,越小性能越好):
分享到:
相关推荐
在C++编程中,`Vector`类通常是指标准模板库(STL)中的`std::vector`,它是一个动态数组,提供了高效且灵活的容器管理。然而,根据标题和描述,这里提到的`Vector`类是你自定义的一个实现,专注于线性代数中的向量...
理解并熟练使用`vector`类模板对于C++编程至关重要,它提供了灵活的动态数组功能,广泛应用于数据结构和算法实现中。在实际开发中,`vector`经常作为函数参数传递,或者作为数据结构的底层实现,比如堆栈、队列等。...
C++中的`std::vector`是一个非常重要的容器,它提供了动态数组的功能,允许在运行时改变大小。在本例中,我们讨论的是一个...在实际编程中,为了保证内存管理的正确性和效率,应优先使用标准库提供的`std::vector`。
使用VectorCAST工具部署Unit test CI环境指导文档 本指导文档旨在帮助开发者使用VectorCAST工具来部署Unit test CI环境,实现自动化测试和持续集成。该文档主要分为五个部分:创建Unit Test工程、测试Regression ...
`Vector`是Java集合框架中的一个类,它在早期版本的Java中被广泛使用。它实现了`List`接口,并提供了线程安全的方法来操作列表元素。`Vector`的实现基于数组,能够动态地增长其大小。与其他集合类型如`ArrayList`...
VectorCAST License 安装手册是 VectorCAST 软件的 License 管理工具安装指南,旨在帮助用户正确地安装和配置 VectorCAST License。下面是该手册中涉及到的知识点: 基本信息 * 软件名称:VectorCAST * 软件版本:...
C++中vector的用法详解 vector是C++中的一种动态数组,相当于一个类,允许程序员在不知道数组规模的情况下动态地...但是,为了提高效率,需要正确地使用vector的各种函数和成员变量,并且需要注意内存管理和效率问题。
然而,在某些只支持C语言的环境中,我们无法直接使用C++的`std::vector`。为了在这些场景下也能实现类似的功能,我们可以自己编写一个纯C语言版本的向量(vector)数据结构。`vector_master`项目就是这样一个实现,...
根据提供的文件信息,这是一本关于如何使用Vector SLP4和Vector DaVinci配置工具来启动和配置Vector公司针对AUTOSAR标准的MICROSAR解决方案的官方手册。以下是从标题、描述、标签和部分内容中提取的知识点: ### ...
《Program.cs》 是本博客中调用Vector类的代码,也是用来验证代码是否正确。 我的上一篇博客描述了如何写一个Vector类,然而所写的Vector类仅限于double型,无法满足实际工作需求。因此在上一篇文档基础上,撰写...
VectorCAST使用手册-...VectorCAST 使用手册-Windows.pdf 提供了 VectorCAST 的安装、License 配置、环境变量设置、测试环境创建等方面的详细信息,为开发者提供了一个详细的指南,以便他们正确地使用 VectorCAST。
此外,由于`Timer`类具有虚析构函数,当我们不再需要这些时钟时,可以使用`std::vector`的`clear`函数来释放内存,避免内存泄漏: ```cpp for (auto& clock : clockList) { delete clock; } clockList.clear(); ``...
Vector Cast Train资料是针对如何使用Vector Cast进行单元测试的一套学习资源。这套资料可能包括详细的教程、示例项目、用户指南和最佳实践等内容,帮助开发者深入理解和掌握Vector Cast的使用。以下是对Vector Cast...
在使用vector NTI进行多重序列比对时,可以使用两种不同的比对程序:AlignX和AlignXBlocks。其中,AlignX适用于核酸序列和蛋白质序列的比对,而AlignXBlocks则是专门针对蛋白质序列的比对工具。 在开始进行序列比对...
在课程设计过程中,你可能还需要编写测试用例来验证你的`vector`类实现是否正确。这将涉及创建一组输入,调用不同的函数,然后检查输出是否符合预期。记得处理各种边界条件,如空`vector`、满`vector`以及在`vector`...
* 连接:可以使用连接操作符 `[]` 来连接多个 Vector,例如 `[vector1, vector2]` 可以将两个 Vector 连接起来。 获取 Vector 的等距条目 在某些情况下,我们需要从 Vector 中获取等距条目,例如从 Vector `[0 25 ...
虽然 `Vector` 在某些情况下可以满足需求,但由于其性能问题和潜在的线程安全陷阱,现代Java编程实践中更倾向于使用其他集合类,如 `ArrayList` 或并发集合类。理解不同集合类的特点及其适用场景对于编写高效、可靠...
《Vector NTI Suite使用详解》 Vector NTI Suite是一款专为分子生物学研究设计的强大软件工具,集成了数据管理、序列编辑、分析与操作等功能。它包含四个主要组件,分别是用于处理DNA、RNA和蛋白质的数据模块。本文...
为了确保Vector Flash Boot Loader能够正确工作,用户需要对其进行适当的配置。这包括但不限于: - **CAN通信硬件**:如果使用CAN总线作为通信方式,则需要配置相关的硬件设置。 - **以太网连接配置**:如果使用...
- **集成问题**:在CI环境中可能出现版本冲突、环境不一致等问题,需要确保所有环境都配置正确,并定期更新Vector Cast版本。 - **性能问题**:测试执行速度慢可能影响效率,优化测试用例、合理安排测试执行顺序或...