繁体   English   中英

如何在Java中获得String [] A-String [] B,即所有在A中但不在B中的元素?

[英]How to get String[] A - String[] B i.e. all elements which are in A but not in B ,In java?

我有一个String [] allEmps; 所有emp的字符串数组;

String [] allEmps = StringUtil.convertCommaStringToArray(listOfEmpsCommaSep, ",");

我有另一个字符串[] EmpsWithCompensationDefined

String [] listOfEmpsWithCompDefined =  DBUtility.selectFieldAndReturnAsStringArray(QueryToGetEmpsWhomCompIsDefined, con);

现在我想得到未定义薪酬的员工,即A中的条目,但B中的条目。

解决方案:我可以遍历两个数组并获得差值。 但这将是O(n ^ 2)复杂的。 还有其他方法可以减少渐近复杂度吗?

编辑:

ArrayList listOfFilteredEmps = new ArrayList();
                    for(int j =0;j<allEmps.length;j++){
                        boolean isMatched = false;
                        for(int i=0;i<listOfEmpsWithCompDefined.length;i++){
                            if(allEmps[j]==listOfEmpsWithCompDefined[i]){
                                isMatched = true;
                            }
                        }
                        if(!isMatched){
                            if(listOfFilteredEmps!=null && listOfFilteredEmps.size()==0){
                                listOfFilteredEmps.add(allEmps[j]);
                            }else{
                                listOfFilteredEmps.add(","+allEmps[j]);
                            }
                        }
                    }

你可以这样尝试

String [] allEmps={"A","B","C","D"};
String [] listOfEmpsWithCompDefined={"A","D","E"};
Set<String> mySet1 = new HashSet<>(Arrays.asList(allEmps)); // convert to set
Set<String> mySet2 = new HashSet<>(Arrays.asList(listOfEmpsWithCompDefined));
mySet1.removeAll(mySet2);// elements which are in A but not in B 
String[] df = mySet1.toArray(new String[mySet1.size()]);// difference 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM