程序如下
共test1和test2两个方法,test1中的Vector为Vector<String>,test2中的为Vector<Layout>,Layout中只有两个String型变量a和b过程:欲查找某字串,看是否在Vector中。
结果:遍历test1用时比遍历test2用时少n倍(本地测试,test1: 15ms test2: 125ms),
真实程序使用了多线程,所以这两种方法的总用时就相差很大了。的确test2多了几步,花费了一些时间。
但实际需要上,希望Vector多记录一些信息,所以用了Layout结构。请问:请问有没有变通的办法,既满足可以多记录信息,又可以接近Vector<String>用时的办法呢?
各位大虾在使用Vector的时候遇到这种矛盾,是怎么解决的呢?#1
VectorTest.java
package temp.vectorTest;import java.util.Date;
import java.util.Vector;public class VectorTest {
static final int loopN = 1000000;
public static void main(String a[]) {
test1();
System.exit(0);
}
// speed test A String
public static void test1() {
// 准备数据
Vector<String> v = new Vector<String>();
for (int i = 0; i <= loopN; i++) {
v.add(Integer.toString(i) + "abcdefg");
}
// 遍历
int x;
long startTime = new Date().getTime();
x = v.indexOf(Integer.toString(loopN) + "abcdefg");
System.out.println("time:" + (new Date().getTime() - startTime) + " the index is:" + x);
}
// speed test B Layout
public static void test2() {
// 准备数据
Vector<Layout> v = new Vector<Layout>();
for (int i = 0; i <= loopN; i++) {
Layout l = new Layout();
l.setA(Integer.toString(i) + "abcdefg");
v.add(l);
} // 遍历
int x = -1;
long startTime = new Date().getTime();
String find = Integer.toString(loopN) + "abcdefg";
for (int i=0;i<v.size();i++) {
Layout l = v.get(i);
if (find.equals(l.getA())) {
x = i;
break;
}
}
System.out.println("time:" + (new Date().getTime() - startTime) + " the index is:" + x);
}}#2
Layout.javapackage temp.vectorTest;class Layout {
private String a;
private String b;
public Layout() {
}
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
}
共test1和test2两个方法,test1中的Vector为Vector<String>,test2中的为Vector<Layout>,Layout中只有两个String型变量a和b过程:欲查找某字串,看是否在Vector中。
结果:遍历test1用时比遍历test2用时少n倍(本地测试,test1: 15ms test2: 125ms),
真实程序使用了多线程,所以这两种方法的总用时就相差很大了。的确test2多了几步,花费了一些时间。
但实际需要上,希望Vector多记录一些信息,所以用了Layout结构。请问:请问有没有变通的办法,既满足可以多记录信息,又可以接近Vector<String>用时的办法呢?
各位大虾在使用Vector的时候遇到这种矛盾,是怎么解决的呢?#1
VectorTest.java
package temp.vectorTest;import java.util.Date;
import java.util.Vector;public class VectorTest {
static final int loopN = 1000000;
public static void main(String a[]) {
test1();
System.exit(0);
}
// speed test A String
public static void test1() {
// 准备数据
Vector<String> v = new Vector<String>();
for (int i = 0; i <= loopN; i++) {
v.add(Integer.toString(i) + "abcdefg");
}
// 遍历
int x;
long startTime = new Date().getTime();
x = v.indexOf(Integer.toString(loopN) + "abcdefg");
System.out.println("time:" + (new Date().getTime() - startTime) + " the index is:" + x);
}
// speed test B Layout
public static void test2() {
// 准备数据
Vector<Layout> v = new Vector<Layout>();
for (int i = 0; i <= loopN; i++) {
Layout l = new Layout();
l.setA(Integer.toString(i) + "abcdefg");
v.add(l);
} // 遍历
int x = -1;
long startTime = new Date().getTime();
String find = Integer.toString(loopN) + "abcdefg";
for (int i=0;i<v.size();i++) {
Layout l = v.get(i);
if (find.equals(l.getA())) {
x = i;
break;
}
}
System.out.println("time:" + (new Date().getTime() - startTime) + " the index is:" + x);
}}#2
Layout.javapackage temp.vectorTest;class Layout {
private String a;
private String b;
public Layout() {
}
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
}
就这一段吧。
for (int i=0;i<v.size();i++) {
在循环上边
int length = v.size();
这样也可以加快遍历速度。