Как получить String [] A - String [] B, т.е. все элементы, которые находятся в A, но не в B, в Java?

1

У меня есть String [] allEmps; String array Of All emps;

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

У меня есть еще одна строка [] EmpsWithCompensationDefined

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

Теперь я хочу получить сотрудников, которых компенсация не определена, т.е. запись, которая находится в A, но не в B.

Решение. Я могу перебрать и массив, и получить разницу. Но это был бы комплекс О (п ^ 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]);
                            }
                        }
                    }
  • 0
    Поделитесь своим кодом, что вы сделали!
Теги:
arrays

1 ответ

5
Лучший ответ

Вы можете попробовать таким образом

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 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню