сравнить двух массивов и получить положение общих элементов - PullRequest
2 голосов
/ 07 марта 2012

У меня есть два массива, а второй является подмножеством первого. Я хочу знать начальную и конечную позицию в первом массиве элементов в подмножестве (в моем примере это позиция в arrayList of: uno, due, tre)

Как изменить этот код?

import java.util.ArrayList;

public class ConfrontaArrayList {
public static void main(String[] args)
{
    ArrayList<String> arrayList = new ArrayList<String>();
    ArrayList<String> subSetArrayList = new ArrayList<String>();

    arrayList.add("inizio");
    arrayList.add("stringa");
    arrayList.add("uno");
    arrayList.add("due");
    arrayList.add("tre");
    arrayList.add("fine");
    arrayList.add("stringa");

    subSetArrayList.add("uno");
    subSetArrayList.add("due");
    subSetArrayList.add("tre");

    System.out.print("Elementi di arrayList: ");
    for (String stringa : arrayList) System.out.print(stringa + " ");
    System.out.print("\nElementi di subSetArrayList: ");
    for (String stringa : subSetArrayList) System.out.print(stringa + " ");
}
}  

Ответы [ 4 ]

2 голосов
/ 07 марта 2012

java.util.Collections.indexOfSubList() метод вернет индекс подсписка:

int startIdx = Collections.indexOfSubList(arrayList, subSetArrayList);
if (-1 != startIdx)
{
    int endIdx = startIdx + subSetArrayList.size() - 1;
}
1 голос
/ 07 марта 2012

Если вы не можете решить всю проблему, разбейте ее на более мелкие шаги:

  1. Как узнать, совпадают ли два элемента?
  2. Учитывая 1, как определить, совпадают ли два списка одинаковой длины?
  3. Учитывая 2, как узнать, совпадает ли список с данным индексом в более длинном списке?
  4. Учитывая 3, как вы можете ответить на вашу проблему?
0 голосов
/ 07 марта 2012

Используйте метод indexOf ArrayList.

for(String item : subSetArrayList)
{
    int index = arrayList.indexOf(item);
}

На 2-й мысли, если SubsetArrayList элементы находятся в той же последовательности и в последовательном порядке. Вы можете сделать следующее:

int startIndex = arrayList.indexOf(subSetArrayList.get(0));
int endIndex = startIndex + subSetArrayList.size() - 1;
0 голосов
/ 07 марта 2012

Самым простым ответом, конечно, является итерация по списку массивов и выполнение String.equals () для поиска индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...