2013-08-04 2 views
0

Я хочу проверить, не имеют ли два массива хотя бы один термин для моей программы.ArrayItem равно по крайней мере одному члену в другом массиве

Я не совсем уверен, что такое код для сравнения двух массивов, но вот что я до сих пор;

if ((modWikiKeyArray).equals(inputArray[0])) 
{ 
    StringBuilder hyperlinkBuilder = new StringBuilder(); 
    for(int i = 0; i < modWikiKeyArray.length; i++) 
    { 
     hyperlinkBuilder.append(modWikiKeyArray[i]); 
    } 
} 

Как бы сравнить массив modWikiKeyArray к inputArray просто проверить и посмотреть, если inputArray [0] равно любой срок внутри modWikiKeyArray?

+0

Ваш цикл 'for' не работает. Если 'inputArray [0]' появляется несколько раз в 'modWikiKeyArray', код в операторе' if' будет выполняться несколько раз. Скорее всего, это не то, что вы хотите. Кроме того, даже после того, как вы нашли 'inputArray [0]' в 'modWikiKeyArray', цикл будет искать больше вхождений, что неэффективно. – user2357112

ответ

0

вы можете сделать следующее

for(int i=0;i<modWikiKeyArray.length;i++) { 
     if(modWikiKeyArray[i].equals(inputArray[0])) { 
      System.out.println("Match found"); 
     } 
    } 

Обратите внимание, что вам необходимо переопределить метод equals() любого массива, который вы создаете (класс того массива, который вы создаете).

+0

Это прекрасно работает для того, что мне нужно. Спасибо. – user2647089

+0

Вы не можете переопределить метод 'equals' массива (и вам не нужно). – user2357112

+0

OMG !! equals() метод массива .... Вы с ума сошли? equals() метод класса, массив которого вы делаете !!! –

1

Arrays.asList позволяет создать список подкрепленную произвольного массива и использовать удобный Java Collections Framework функции, такие как метода contains:

Arrays.asList(oneArray).contains(elementFromAnotherArray) 

Если вы хотите увидеть, если массивы имеют по крайней мере один элемент, в общем, вы могли бы построить HashSet из одной и петли над другой, чтобы попытаться найти общий элемент:

boolean arraysIntersect(Object[] array1, Object[] array2) { 
    Set array1AsSet = HashSet(Arrays.asList(array1)); 
    for (Object o : array2) { 
     if (array1AsSet.contains(o)) { 
      return true; 
     } 
    } 
    return false; 
} 
+0

Это почти кажется слишком сложным для программы, с которой я работаю. Я еще не изучил HashSets, но спасибо за ваш ответ :) – user2647089

+0

@Skippy не похож. Смотрите его комментарий к моему сообщению! –

+0

Чтобы убедиться, что это работает, вам также нужно реализовать hashCode() для класса элемента. – Neel

0

Идя фрагмент кода, он выглядит, как вам нужно, чтобы проверить наличие inputArray [0] только в этом случае следующие достаточно:

boolean exists = java.util.Arrays.asList(modWikiKeyArray).contains(inputArray[0]); 

Кроме того, вы также можете использовать ArrayUtils от Apache Commons-лана:

boolean exists = ArrayUtils.contains(modWikiKeyArray, inputArray[0]); 

Однако, если я читаю текст вашего вопроса, то кажется, что вы хотите найти, если modWikiKeyArray содержит, по меньшей мере, один элемент из inputArray. Для этого вы также можете использовать retainAll из API Collections для выполнения перекрестного списка и посмотреть, не является ли список пересечений непустым.

Однако самым примитивным по-прежнему остается метод Аникета. Однако я буду изменять его, чтобы уменьшить ненужные операции:

int i = modWikiKeyArray.length - 1; 
MyObject inputElement = inputArray[0]; 
boolean found = false; 
for(; i != 0; i--) { 
    if(modWikiKeyArray[i].equals(inputElement)) { 
     found = true; 
     break; 
    } 
} 
Смежные вопросы