比较两个向量

时间:2014-03-10 15:17:03

标签: java vector compare

我有两个Vector就像下面一样;

private Vector<Vector<Object>> vector1 = new Vector<Vector<Object>>();
private Vector<Vector<Object>> vector2 = new Vector<Vector<Object>>();

一些方法填充上面的向量并创建了向量;

向量1

[1000, 0, 100100, 1]
[1000, 1, 100100, 1]
[1000, 2, 100100, 1]
[1000, 3, 100100, 1]

vector 2

[1000, 0, ppp, yyy]
[1000, 1, zzz, xxx]

你可以看到矢量2少了两行。 Vector的第0和第1列对我很重要。我在sql查询中使用它们。当行不在向量2中时,我需要从DB中删除向量1相关列。

我的代码是:

for(int i =0; i != vector1.size(); i++){
        if (i>vector2.size()){
            System.out.println("detected");
            try{
             ResultSet rs;
             Statement stmt;
             ResultSetMetaData rsmtd;
             String query = "USE DBST\n" +
             "delete from Mtable where   Me='"+vector1.elementAt(i).elementAt(0).toString()+"' and P='"+vector1.elementAt(i).elementAt(1).toString()+"'";
             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
             String connectionUrl = "jdbc:sqlserver://192.168.130.100;" + "databaseName=DBST;" + "user=" + "user1" + ";" + "password=" + "user1pass" + ";"; 
             Connection con = DriverManager.getConnection(connectionUrl);
             stmt = con.createStatement();
             rs = stmt.executeQuery(query);
            }
            catch(SQLException se){
            se.printStackTrace();
            }
            catch(Exception e){
            e.printStackTrace();
            }
        }
        else{
           System.out.println(vector1.elementAt(i).elementAt(0).toString()+vector1.elementAt(i).elementAt(1).toString());
        }

    }

当我运行此代码时,没有任何反应。剩余行(向量1的第2行和第3行)未从DB中删除。总是来声明并打印当前vector1行的所需格式。

我该如何处理?

谢谢

1 个答案:

答案 0 :(得分:1)

就比较而言,您可以执行以下操作来比较每个向量中的第1个和第2个条目,然后抛出从DB中找不到的向量。

List<ArrayList<Integer>> vector1 = new ArrayList<ArrayList<Integer>>();
List<ArrayList<Integer>> vector2 = new ArrayList<ArrayList<Integer>>();

ArrayList<Integer> tmp = new ArrayList<Integer>();
tmp.add(1000);
tmp.add(0);
tmp.add(100100);
tmp.add(1);
vector1.add(tmp);
tmp = new ArrayList<Integer>();
tmp.add(1000);
tmp.add(1);
tmp.add(100100);
tmp.add(1);
vector1.add(tmp);
tmp = new ArrayList<Integer>();
tmp.add(1002);
tmp.add(2);
tmp.add(100100);
tmp.add(1);
vector1.add(tmp);

tmp = new ArrayList<Integer>();
tmp.add(1000);
tmp.add(0);
tmp.add(100102);
tmp.add(2);
vector2.add(tmp);
tmp = new ArrayList<Integer>();
tmp.add(1000);
tmp.add(1);
tmp.add(100100);
tmp.add(1);
vector2.add(tmp);

System.out.println(vector1);
System.out.println(vector2);

Integer[] vec3 = new Integer[2];
Integer[] vec4 = new Integer[2];
boolean flag = false;

for (ArrayList<Integer> vec1Tmp : vector1) {
    flag = false;
    vec3[0] = vec1Tmp.get(0);
    vec3[1] = vec1Tmp.get(1);

    for (ArrayList<Integer> vec2Tmp : vector2) {
        vec4[0] = vec2Tmp.get(0);
        vec4[1] = vec2Tmp.get(1);

        if ( Arrays.equals(vec3, vec4) ) {
            flag = true;
            break;
        }

    }

    if ( !flag ) {
        // do your deletion here
        System.out.println(vec1Tmp);
    }
}