Я сравниваю два списка ArrayLists на основе заказа
Размер total_list всегда будет больше, чем sub_list
import java.util.ArrayList;
import org.json.JSONException;
public class MrTest {
public static void main(String args[]) throws JSONException
{
ArrayList<String> total_list = new ArrayList<String>();
ArrayList<String> sub_list = new ArrayList<String>();
ArrayList<String> un_common_list = new ArrayList<String>();
total_list.add("Beverages");
total_list.add("Hot");
total_list.add("Sai1");
total_list.add("Sai2");
total_list.add("Sai3");
sub_list.add("Sai1");
sub_list.add("Sai2");
sub_list.add("Sai3");
for(int i=0;i<total_list.size();i++)
{
String total_name = total_list.get(i);
String sub_name = sub_list.get(i);
if(total_name.equals(sub_name))
{
}
else
{
un_common_list.add(total_name);
}
}
System.out.println(un_common_list);
}
}
я осознаю
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
at MrTest.main(MrTest.java:35)
где, как я ожидаю, выход
[Beverages, Hot]
Может ли кто-нибудь помочь мне, как получить Output as
[Beverages, Hot] in this case ??
Я думаю, вы просто хотите:
total_list.removeAll(sub_list);
Если вы хотите сохранить total_list
:
List<String> uncommon = new ArrayList<>(total_list);
uncommon.removeAll(sub_list);
Вы используете один и тот же индекс для обоих списков, заставляя подсписку выйти за пределы. Используйте цикл в цикле и используйте логическое значение, чтобы проверить, соответствует ли оно любому из значений, если оно не соответствует, то оно должно добавить строку в необычный список.
boolean inlist=false;
for(int i=0;i<total_list.size();i++)
{
String total_name = total_list.get(i);
for(int k=0;k<sub_list.size();k++)
{
String sub_name = sub_list.get(k);
if(total_name.equals(sub_name))
{
inlist=true;
}
}
if (!inlist){un_common_list.add(total_name);}
inlist=false;
}
я бы пошел с 1 циклом, сначала сделаю копию total_list, используя System.arraycopy, в un_common_list, затем перебирает sub_list и удаляет элементы, присутствующие в sub_list из un_common_list, порядок должен быть сохранен
однако removeAll() также должен сохранить порядок, просто используйте экземпляр массива
если порядок вставки должен поддерживаться, тогда можно попробовать это условие
for(int i=0;i<total_list.size() && i<sub_list.size();i++)
for(int i=0;i<total_list.size();i++)
// Total_list size is 5
{
String total_name = total_list.get(i);
String sub_name = sub_list.get(i);
// sub_list size is 3,
// but you are calling sublist.get(3), sublist.get(4) and sublist.get(5)
}
i
для обоих.