Simple ArrayList删除相同的内容

时间:2013-06-30 17:25:39

标签: java android collections

我有一个非常奇怪的问题,我想以非常有效的方式做到这一点。在我的应用程序毫秒计数..

我有四个ArrayLists个字符串

title desc, price, usageArray;

前三个包含数据,其中usageArray包含数据,某些地方为“NONE”,例如

UsageArray
  

a b c NONE D NONE

我想从usageArray中删除“NONE”,例如让First NONE的索引为3,那么title,desc和price中的第三个元素也会被删除。

我怎样才能以极其有效的方式做到这一点

5 个答案:

答案 0 :(得分:3)

首先,我建议您创建一个类,例如Book,其中包含所有这些属性,并且有一个List<Book>,而不是为所有属性创建4个不同的列表。< / p>

<强> P.S。 : 通常,每当您看到自己修改或同时使用多个列表时,就表明是时候创建一个新类了。

class Book {
    String title;
    String desc;
    BigDecimal price;
    String usage;
}

然后你有一个这样的清单:

List<Book> books;

现在,要删除usageNULL的所有索引,就像这样简单:

ListIterator<Book> iterator = books.listIterator();

while (iterator.hasNext()) {
    Book book = iterator.next();
    if (book.getUsage().equals("NULL")) {
        iterator.remove();
    }
} 

此外,无论您将"Null"作为字符串值,都应考虑将其更改为null

注意:从List删除元素时应注意。在执行此操作时,应始终使用迭代器

另见:

答案 1 :(得分:0)

试试这个

   int index = 0;
    for (int i = 0; i < usageArray.size(); i++) {
        if (usageArray.get(i).contains("NONE")) {
            index=usageArray.indexOf("NONE");
            usageArray.remove(index);
            title.remove(index);
            desc.remove(index);
            price.remove(index);
            i--;
        }

    }

答案 2 :(得分:0)

这是经过测试的代码。 公共类mainclass {

public static void main(String ar[])
{

    List<Integer> indexes = new ArrayList<Integer>();


    List<String> title = new ArrayList<String>();
        title.add("title 1");
        title.add("title 2");
        title.add("title 3");
    List<String> desc = new ArrayList<String>();
        desc.add("desc 1");
        desc.add("desc 2");
        desc.add("desc 3");
    List<String> price = new ArrayList<String>();
        price.add("price 1");
        price.add("price 2");
        price.add("price 3");
    List<String> usageArray = new ArrayList<String>();
        usageArray.add("usage 1");
        usageArray.add("NONE");
        usageArray.add("usage 1");


    for (String string : usageArray) {

        if(string.equalsIgnoreCase("NONE"))
        {
            indexes.add(usageArray.indexOf(string));

        }

    }


    for (Integer index : indexes) {

        price.remove(index);
        desc.remove(index);
        title.remove(index);
        usageArray.remove(index);

    }

}

}

答案 3 :(得分:0)

这(照例)取决于。您的数据集有多大?您是否测试了一种基本方法并且看到它需要花费太多时间?例如,简单的LinkedLists在删除时更有效(与ArrayList相比)。您最终希望得到什么,一种快速查找事物的数据结构?按指数?一把钥匙? 您需要快速,实际过滤或完成后需要什么?

即使在简单的情况下也可以采用多种方法。如何使用每列的字段合并到一个对象中:

class Data {
  String title;
  String desc;
  String price;
  String usage;
}

然后:

LinkedList<Data> allData = ...;

for (Iterator iter=allData.iterator();iter.hasNext();) {
  Data data = iter.next();
  if ("NONE".equals(data.usage)) { //see note about using something else here
    iter.remove();
  }
}
//allData is now cleaned of any entries with USAGE of NONE

通常比使用ArrayList更快,当然比使用多个列表等等更快。但又取决于。

例如,可能希望根据您的数据建模需求在单独的类中使用。

无论算法如何进一步提高性能(这是重要的部分,只为了娱乐,总是测量!)考虑:

  • usage设为enumint以获得更有效的比较或a 字符串常量因此不需要equals(),而是可以使用usage == NONE

答案 4 :(得分:-1)

检查以下代码,

public static void main(String ar[])
{

    List<String> title = new ArrayList<String>();
        title.add("title 1");
        title.add("title 2");
        title.add("title 3");
    List<String> desc = new ArrayList<String>();
        desc.add("desc 1");
        desc.add("desc 2");
        desc.add("desc 3");
    List<String> price = new ArrayList<String>();
        price.add("price 1");
        price.add("price 2");
        price.add("price 3");
    List<String> usageArray = new ArrayList<String>();
        usageArray.add("usage 1");
        usageArray.add("NONE");
        usageArray.add("usage 1");


    int index = -1;
    for (String string : usageArray) {

        if(string.equalsIgnoreCase("NONE"))
        {
            index = usageArray.indexOf(string);
                    usageArray.remove(string);
                    price.remove(index);
                    desc.remove(index);
                    title.remove(index);

        }

    }





}