二进制搜索查询结果

时间:2012-02-15 09:50:11

标签: java

从电子表格插入到数据库时,我有已经存在的行。所以我需要在插入之前检查现有的行。我是用Java做的。 在电子表格中我有:

     name
     a
     b
     c
     d
     b

数据库dbo.emp有:

name id
 x     1
 y     2
 z     3
 d     4

重复行。要查找重复的行,我需要搜索arraylist。所以我查询excel和sql数据库。我将通过查询Excel工作表获得的结果放入arraylist namexcel中。通过查询dbo.emp到arraylist namedb获得的结果。 现在我需要搜索二进制搜索中存在的哪些行。 我写了查询并存储如下:

        String ExcelQueryString2 = "select * from [Sheet1$]";
        ResultSet SpreadsheetValues = stmt2.executeQuery(ExcelQueryString2);
        List namexcel = new  ArrayList();
        while (SpreadsheetValues.next()) {
        namexcel.add(SpreadsheetValues.getString("name"));}

       String Querystring="SELECT Name from dbo.emp" 
      List namedb = new  ArrayList();
      ResultSet  rs = statement.executeQuery(Querystring);
         while(rs.next())
 {
        namedb .add(rs.getString("Name"));
   }

我的问题:

  1. 如何为这些arraylist实现二进制搜索?
  2. 如何在插入前省略此行?
  3. 如何删除exceldatabase中存在的重复行?
  4. 请提供代码段。

3 个答案:

答案 0 :(得分:0)

二进制搜索要求您维护ArrayList已排序,并使用Collections.binarySearch()进行搜索。

你可能想要使用Set来改造 - 这保证了没有重复作为其行为的一部分

答案 1 :(得分:0)

您可以考虑使用LinkedHashSet,这可以确保在添加数据时不会重复数据,同时保持插入顺序。

答案 2 :(得分:0)

您可以使用当前的两个列表创建集合实现。然后你可以使用这个链接中使用的set difference方法。

http://www.java2s.com/Code/Java/Collections-Data-Structure/Setoperationsunionintersectiondifferencesymmetricdifferenceissubsetissuperset.htm

实际上你不需要去二元搜索。在将列表传递给二进制搜索功能之前,您需要对其进行排序。这是一项代价高昂的行动。