`
liu4626846
  • 浏览: 3196 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

正确使用Vector类

阅读更多

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类

    在C++编程中,`Vector`类通常是指标准模板库(STL)中的`std::vector`,它是一个动态数组,提供了高效且灵活的容器管理。然而,根据标题和描述,这里提到的`Vector`类是你自定义的一个实现,专注于线性代数中的向量...

    vector 类模版

    理解并熟练使用`vector`类模板对于C++编程至关重要,它提供了灵活的动态数组功能,广泛应用于数据结构和算法实现中。在实际开发中,`vector`经常作为函数参数传递,或者作为数据结构的底层实现,比如堆栈、队列等。...

    c++ 简易模板类vector

    C++中的`std::vector`是一个非常重要的容器,它提供了动态数组的功能,允许在运行时改变大小。在本例中,我们讨论的是一个...在实际编程中,为了保证内存管理的正确性和效率,应优先使用标准库提供的`std::vector`。

    使用VectorCAST工具部署Unit test CI环境指导文档.docx

    使用VectorCAST工具部署Unit test CI环境指导文档 本指导文档旨在帮助开发者使用VectorCAST工具来部署Unit test CI环境,实现自动化测试和持续集成。该文档主要分为五个部分:创建Unit Test工程、测试Regression ...

    Java Vector 的相关知识

    `Vector`是Java集合框架中的一个类,它在早期版本的Java中被广泛使用。它实现了`List`接口,并提供了线程安全的方法来操作列表元素。`Vector`的实现基于数组,能够动态地增长其大小。与其他集合类型如`ArrayList`...

    VectorCAST License安装手册.pdf

    VectorCAST License 安装手册是 VectorCAST 软件的 License 管理工具安装指南,旨在帮助用户正确地安装和配置 VectorCAST License。下面是该手册中涉及到的知识点: 基本信息 * 软件名称:VectorCAST * 软件版本:...

    c++中vector的用法详解vector类用法.docx

    C++中vector的用法详解 vector是C++中的一种动态数组,相当于一个类,允许程序员在不知道数组规模的情况下动态地...但是,为了提高效率,需要正确地使用vector的各种函数和成员变量,并且需要注意内存管理和效率问题。

    纯c语言向量vector实现vector_master

    然而,在某些只支持C语言的环境中,我们无法直接使用C++的`std::vector`。为了在这些场景下也能实现类似的功能,我们可以自己编写一个纯C语言版本的向量(vector)数据结构。`vector_master`项目就是这样一个实现,...

    Startup with Vector SLP4 User Manual---Vector Davinci官方帮助配置手册.pdf

    根据提供的文件信息,这是一本关于如何使用Vector SLP4和Vector DaVinci配置工具来启动和配置Vector公司针对AUTOSAR标准的MICROSAR解决方案的官方手册。以下是从标题、描述、标签和部分内容中提取的知识点: ### ...

    基于C#编程建立泛型Vector数据类型及对应处理方法

    《Program.cs》 是本博客中调用Vector类的代码,也是用来验证代码是否正确。 我的上一篇博客描述了如何写一个Vector类,然而所写的Vector类仅限于double型,无法满足实际工作需求。因此在上一篇文档基础上,撰写...

    VectorCAST使用手册-Windows.pdf

    VectorCAST使用手册-...VectorCAST 使用手册-Windows.pdf 提供了 VectorCAST 的安装、License 配置、环境变量设置、测试环境创建等方面的详细信息,为开发者提供了一个详细的指南,以便他们正确地使用 VectorCAST。

    使用基类管理一个时钟的列表(可以使用STL的vector)

    此外,由于`Timer`类具有虚析构函数,当我们不再需要这些时钟时,可以使用`std::vector`的`clear`函数来释放内存,避免内存泄漏: ```cpp for (auto& clock : clockList) { delete clock; } clockList.clear(); ``...

    单元测试 Vector Cast Train资料

    Vector Cast Train资料是针对如何使用Vector Cast进行单元测试的一套学习资源。这套资料可能包括详细的教程、示例项目、用户指南和最佳实践等内容,帮助开发者深入理解和掌握Vector Cast的使用。以下是对Vector Cast...

    vector NTI11 使用教程

    在使用vector NTI进行多重序列比对时,可以使用两种不同的比对程序:AlignX和AlignXBlocks。其中,AlignX适用于核酸序列和蛋白质序列的比对,而AlignXBlocks则是专门针对蛋白质序列的比对工具。 在开始进行序列比对...

    vector类 c语言版 源码 课程设计

    在课程设计过程中,你可能还需要编写测试用例来验证你的`vector`类实现是否正确。这将涉及创建一组输入,调用不同的函数,然后检查输出是否符合预期。记得处理各种边界条件,如空`vector`、满`vector`以及在`vector`...

    matlab 里面vector

    * 连接:可以使用连接操作符 `[]` 来连接多个 Vector,例如 `[vector1, vector2]` 可以将两个 Vector 连接起来。 获取 Vector 的等距条目 在某些情况下,我们需要从 Vector 中获取等距条目,例如从 Vector `[0 25 ...

    线程安全Vector

    虽然 `Vector` 在某些情况下可以满足需求,但由于其性能问题和潜在的线程安全陷阱,现代Java编程实践中更倾向于使用其他集合类,如 `ArrayList` 或并发集合类。理解不同集合类的特点及其适用场景对于编写高效、可靠...

    Vector NTI Suite使用说明.pdf

    《Vector NTI Suite使用详解》 Vector NTI Suite是一款专为分子生物学研究设计的强大软件工具,集成了数据管理、序列编辑、分析与操作等功能。它包含四个主要组件,分别是用于处理DNA、RNA和蛋白质的数据模块。本文...

    vector flash

    为了确保Vector Flash Boot Loader能够正确工作,用户需要对其进行适当的配置。这包括但不限于: - **CAN通信硬件**:如果使用CAN总线作为通信方式,则需要配置相关的硬件设置。 - **以太网连接配置**:如果使用...

    (Vector Cast)UT 工程的总结问题

    - **集成问题**:在CI环境中可能出现版本冲突、环境不一致等问题,需要确保所有环境都配置正确,并定期更新Vector Cast版本。 - **性能问题**:测试执行速度慢可能影响效率,优化测试用例、合理安排测试执行顺序或...

Global site tag (gtag.js) - Google Analytics