У меня есть старый array и я хочу сравнить это с новым array и показать только элементы нового array без того, чтобы они были повторены в старом array.
например:
arrayviejo = (casa, jardin, arbol, cochera)
arraynuevo = (casa, jardin, cesped, calle)
arraylimpio = (cesped, calle)
А именно, вступи в брак и сад они повторяются и поэтому не должны быть, и ты подпираешь, дерево и гараж принадлежат старику array, так что также. (я использовал только слова для примера но каждый элемент array - линия 150 символов приблизительно) Я надеюсь, что понимают... Спасибо за чтение
Я даю из-за факта, что ты используешь Java 8 или начальник, и что твои arrays - типа String [].
public static void main(String[] args) {
String[] arrayViejo = {"uno", "dos", "tres"};
String[] arrayNuevo = {"uno", "dos", "cuatro", "cinco"};
List<String> listaVieja = Arrays.asList(arrayViejo);
String[] arrayLimpio = Stream.of(arrayNuevo).filter(i->!listaVieja.contains(i)).toArray(String[]::new);
for (int i = 0; i<arrayLimpio.length;i++) {
System.out.println(arrayLimpio[i]);//sale cuatro cinco
}
}
BГЎsicamente:
Перемещать старый array в список, чтобы облегчать работать с Г©l.
Создавать stream на новом array, просачиваться для того, чтобы только остались элементы, что не estГЎn в старом списке, происходить с новым array.
Их compaГ±eros дали несколько возможных решений и всех vГЎlidas.
В любом случае, если я это permitГ-s, aГ±ado какая-то reflexiГіn.
1. - Нужно иметь в виду, что это не то же самое сравнивать объекты, что цепи символов. Это не то же самое, что и у тебя был тот же объект в двух arrays, чтобы иметь два объекта с той же цепью.
В первом случае, она comparaciГіn serГ - в mГЎs rГЎpida и podrГ, - чтобы использовать (есть mГЎs формы) mГ©todo equals класс Object
En этот случай, tendrГ-эксперт, который должен пробегать (в лучшем случае) все элементы первого array. А именно, который мы говорим об одной progresiГіn aritmГ©tica. В этих случаях одна pequeГ±a улучшается serГ, - чтобы сравнивать mГЎs pequeГ±o (меньше элементов) с mГЎs большой, чтобы предотвращать ненужные повторения.
Во втором случае, ademГЎs того, чтобы быть должным пробегать все элементы array, tendrГ-эксперта, чем подтверждать цепь, которую он содержит, aГ±adiendo mГЎs время процесса.
- различие важные , которые ты должен иметь в виду.
В примере, который ты помещаешь, ты даешь несколько элементов в каждом array и не notarГЎs едва отличись между одной и другой вещью, но Вїy, если ты был должен делать эту comprobaciГіn на 10000 элементах или на 10^6? Вїy, если ademГЎs ты был должен делать эту comprobaciГіn постоянно? Уже estarГ-хозяева говоря о цене computacional важно.
2. - Нужно иметь в виду тип информации, которая хочет сохранять, и операции, которые будут осуществляться на тех же самых. У
API коллекций Java есть mГєltiples структуры данных, которые могут помогать тебе много в проблемах относительно genГ©ricos как тот, которого ты выдвигаешь.
Ввиду проблемы, которую ты предлагаешь, возможно, что array не структура mГЎs подходящая для того, чтобы сравнивать цепи символов. Если данные о ссылке будут являться относительно стабильными, возможно была лучше аккуратная структура. Эти структуры медлят mГЎs с тем, чтобы хранить немного элементы, но их окончательно mГЎs rГЎpidas в консультациях. Пример - TreeSet
Эта структура упорядочена и не допускает дубликаты, из-за которого, скорее всего, он не подает тебя, и tendrГЎs, что использовать другую, которая sГ - позволяла бы тебе иметь дубликаты или которая позволяла бы тебе манипулировать с mГєltiples трэдами ejecuciГіn и нуждался в том, чтобы синхронизироваться... список требований - пространный. Но в общем важна использовать структура данных согласно данным и использованию, которого бы станет .
В твоем случае то, что ты хочешь сделать, grosso способ, одна intersecciГіn наборов и для этого, это mГЎs правильно serГ, - которого, на вышеупомянутом TreeSet, ты осуществишь mГ©todo retainAll или removeAll интерфейс Set
Esto ты permitirГ, - когда, на структуре Java, они создают твой собственный алгоритм для нее intersecciГіn наборов segГєn parГЎmetros, который tГє сам ты счел необходимым. Хорошее этого - что вышеупомянутая структура serГ - в переиспользуемый в стольких программах, как ты нуждался.
Из-за того, что оставляет тебе ответ немного mГЎs прямая и увидь посредственно казавшийся пример чего-то, ты можешь использовать ArrayList , как они говорят их тебе compaГ±eros, вместо array bГЎsico. Если ты обращаешь внимание в ней implementaciГіn.
verГЎs, что этот класс уже осуществляет mГ©todo retainAll (), что то, что он делает, ни mГЎs ни меньше, одну intersecciГіn наборов.
Окончательно, для каждой проблемы Ваш soluciГіn.
Приветствие во все.
Предполагая, что твои arrays были типа Арраилист де Стринг, я предлагаю тебе следующую soluciГіn:
public static void main(String []args) {
ArrayList<String> arrayViejo = new ArrayList<String>();
arrayViejo.add("casa");
arrayViejo.add("jardin");
arrayViejo.add("arbol");
arrayViejo.add("cochera");
ArrayList<String> arrayNuevo = new ArrayList<String>();
arrayNuevo.add("casa");
arrayNuevo.add("jardin");
arrayNuevo.add("cesped");
arrayNuevo.add("calle");
ArrayList<String> arrayLimpio=crearArrayLimpio(arrayViejo,arrayNuevo);
for(String elemento: arrayLimpio){
System.out.println(elemento);
}
}
public static ArrayList<String> crearArrayLimpio (ArrayList<String> arrayViejo, ArrayList<String> arrayNuevo){
ArrayList<String> arrayLimpio= new ArrayList<String>();
for(String elemento: arrayNuevo) {
if (!contieneElemento(arrayViejo, elemento)) arrayLimpio.add(elemento);
}
return arrayLimpio;
}
public static boolean contieneElemento( ArrayList<String> array, String elemento) {
for(String elementoArray: array) {
if (elemento.equals(elementoArray)) return true;
}
return false;
}