Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java新手-列出重复项的代码需要优化_Java_Android - Fatal编程技术网

java新手-列出重复项的代码需要优化

java新手-列出重复项的代码需要优化,java,android,Java,Android,以下代码执行以下操作:对于“a”中的每个元素,查找其在元素“b”中是否具有匹配项: String a[] = new String[]{"a","b","c"}; String b[] = new String[]{"e","f","a","a"}; String hold=""; for (int i = 0; i < a.length; i++){ for (int k = 0; k < b.length; k++){ if ( a[i].equals( b[

以下代码执行以下操作:对于“a”中的每个元素,查找其在元素“b”中是否具有匹配项:

String a[] = new String[]{"a","b","c"};
String b[] = new String[]{"e","f","a","a"};
String hold=""; 

for (int i = 0; i < a.length; i++){


for (int k = 0; k < b.length; k++){

     if ( a[i].equals( b[k])  ){
        hold+=a[i];

     }//if

}//for


}//for
stringa[]=新字符串[]{“a”、“b”、“c”};
字符串b[]=新字符串[]{“e”、“f”、“a”、“a”};
字符串hold=“”;
for(int i=0;i
问题是,有时数组“b”可能包含重复项,但我们不希望 要记录在变量“hold”中的重复项

以下是我尝试过的方法-将所有匹配项保存到哈希集,然后使用containsKey()首先 检查它是否在hashset中,如果不在,则更新'hold'变量。还尝试在数组中记录每个匹配项,并在更新“hold”变量之前首先检查此数组


还有别的办法吗?有没有更好的方法来实现这一点?

添加一个中断,以便在获得匹配的对象后立即离开

for (int k = 0; k < b.length; k++){

     if ( a[i].equals( b[k])  ){
        hold+=a[i];
        break;
     }//if

}//for
for(int k=0;k
编辑:

如果你想阻止另一个也这样做:

    start:
    for (int i = 0; i < a.length; i++){


        for (int k = 0; k < b.length; k++){

            if ( a[i].equals( b[k])  ){
                hold+=a[i];
                break start;
            }//if

        }//for


    }//for
开始:
for(int i=0;i
编辑

如果您想确保不会获得“a”副本,请执行以下操作:

String a[] = new String[]{"a", "b", "c"};
String b[] = new String[]{"e", "f", "a", "a"};
List<String> matches = new ArrayList<String>();

String hold = "";

for (String anA : a)
    if (!matches.contains(anA))
        for (String aB : b)
            if (anA.equals(aB))
            {
                hold += anA;
                matches.add(anA);
            }//if
    }//for


}//for
stringa[]=新字符串[]{“a”、“b”、“c”};
字符串b[]=新字符串[]{“e”、“f”、“a”、“a”};
列表匹配项=新的ArrayList();
字符串hold=“”;
对于(字符串anA:a)
如果(!matches.contains(anA))
用于(字符串aB:b)
如果(anA.等于(aB))
{
hold+=anA;
匹配。添加(anA);
}//如果
}//为了
}//为了

你应该考虑使用你的HOLD变量以不包含重复,并使用<代码> RealObjult<代码>方法来获得集合和另一个集合之间的交集(可以包含重复)。

< P>我将它们转换成列表并用于查找匹配。然后只需循环hold变量的列表。使用此方法,您不必担心b中的重复项。Retainal不会在意它在b中出现两次。它将保留a,因为它存在于b中。数组中剩下的任何内容都将连接到您的控制中

String a[] = new String[]{"a","b","c"};
String b[] = new String[]{"e","f","a","a"};

//get new ArrayList because asList is immutable
List<String> aList = new ArrayList(Collections.asList(a));
List<String bList = Collections.asList(b);

aList.retainAll(bList);
StringBuilder sb = new StringBuilder();
for(String s : aList) {
    sb.append(s);
}

String hold = sb.toString();
stringa[]=新字符串[]{“a”、“b”、“c”};
字符串b[]=新字符串[]{“e”、“f”、“a”、“a”};
//获取新的ArrayList,因为asList是不可变的
列表列表=新的数组列表(Collections.asList(a));

列表使用集合将自动删除重复项

Set< String > mySet1 = new HashSet< String >(Arrays.asList(a));
Set< String > mySet2 = new HashSet< String >(Arrays.asList(b));
SetmySet1=newhashset(Arrays.asList(a));
SetmySet2=newhashset(Arrays.asList(b));
mySet1
mySet2
将不包含任何重复项。 根据您的示例,
mySet1
将是
{a”,“b”,“c”}
mySet2
将是
{e”,“f”,“a”}

在这一点之后,您可以使用多种方法来获取您想要检查文档的位置。
我相信您正在寻找removeAll函数。

我看到您正在做的是,您有两个包含内容的数组。我知道内容将来会有所不同。每次遍历数组A的1个字符时,都要测试数组B的值是否相等。如果是这样,您希望在数组/字符串保持中存储该值一次

如果该值已经存在,为什么不直接签入保持,如果不存在,则添加它,如果存在,则跳过它


PS:很抱歉,我没有在评论中这样做,但我没有足够的代表对问题本身发表评论。

使用java.util.List很简单:

List<String> listB = new LinkedList();
    for(int i = 0; i < b.lenght; i++) listB.add(b[i]);
    for(int i = 0; i < a.lenght; i++) {

        if(listB.contains(a[i])) hold+=a[i];
    }
List listB=newlinkedlist();
对于(inti=0;i
是的,这基本上就是我前面提到的代码片段。gj:)编辑了我的答案。添加一个标签并打破您定义的标签。此外,如果您要检查“a”中是否也有重复项,则a for不是最佳解决方案,您应该使用其他人已经在此处显示的其他解决方案:)您的第二个解决方案不起作用,例如:字符串a[]=新字符串[]{“c”、“a”、“a”、“e”};字符串b[]=新字符串[]{“a”,“c”};输出仅为c。哪个是错的