English 中文(简体)
在两个字符串列表中获取常见的字符串配对
原标题:Getting common string pairs in two string list

Hi i am taking common count in two list.
Here is my code.

    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 

Then result is 2 not 3
As their is only two common pair we can take out.

但方法非常缓慢 任何改进 上面的方法 使它快速。

最佳回答

这项工作应更容易围绕以下几个方面:

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();
问题回答

使用临时收藏并添加 All(), 保留 All() :

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

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

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;
}




相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签