【问题标题】:Getting common string pairs in two string list在两个字符串列表中获取常用字符串对
【发布时间】:2012-05-23 06:17:15
【问题描述】:

您好,我在两个列表中进行常用计数。
这是我的代码。

    public static int getMatchCount(List<String> listOne, List<String> listTwo) {
    String valueOne = "";
    String valueTwo = "";
    int matchCount = 0;
    boolean isMatchedOnce=false;

    for (int i = 0; i < listOne.size(); i++) {
        valueOne = listOne.get(i);
        isMatchedOnce=false;
        if (StringUtils.isBlank(valueOne))
            continue;

        for (int j = 0; j < listTwo.size(); j++) {
            valueTwo = listTwo.get(j);
            if (StringUtils.isBlank(valueTwo))
                continue;

            if (valueTwo.equals(valueOne) && (!isMatchedOnce)) {
                matchCount++;
                listOne.set(i, "");
                listTwo.set(j, "");
                isMatchedOnce=true;
            }
        }
    }
    return matchCount;
}


    for ex
listone listTwo
A            A
A            B
B 

那么结果是 2 而不是 3
因为它们是我们可以取出的唯一两个常见的对。

但是这个方法很慢 对上述方法的任何改进都可以使它更快。

【问题讨论】:

  • 您想计算两个列表中的共同元素。我说的对吗?

标签: java string list


【解决方案1】:

这应该更容易解决:

List<String> listOne = new ArrayList<String>();
//add elements
List<String> listTwo= new ArrayList<String>();
//add elements
List<String> commonList = new ArrayList<String>(listTwo);
commonList.retainAll(listOne);
int commonListSize = commonList.size();

【讨论】:

    【解决方案2】:

    使用临时 Collection 和 addAll()、retainAll():

    Set<String> set = new HashSet<String>();
    set.addAll(list1);
    set.retainAll(list2);
    int count = set.size();
    

    【讨论】:

      【解决方案3】:

      也许你可以试试这个......

      public static int getMatchCount(List<String> listOne, List<String> listTwo) {
          String valueOne;
          String valueTwo;
          int matchCount = 0;
          boolean isMatchedOnce;
      
          //for (int i = 0; i < listOne.size(); i++) {
          for(String i : listOne){
              valueOne = i;
              isMatchedOnce = false;
              if (StringUtils.isBlank(valueOne)) {
                  continue;
              }
      
              for (String j : listTwo) {
                  valueTwo = j;
                  if (StringUtils.isBlank(valueTwo)) {
                      continue;
                  }
      
                  if (valueTwo.equals(valueOne) && (!isMatchedOnce)) {
                      matchCount++;
                      listOne.set(listOne.indexOf(i), "");
                      listTwo.set(listOne.indexOf(j), "");
                      isMatchedOnce = true;
                  }
              }
          }
          return matchCount;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-14
        • 1970-01-01
        • 2017-09-24
        • 2012-01-12
        • 1970-01-01
        • 2012-12-28
        相关资源
        最近更新 更多