Java ArrayList寻找多个字符串

时间:2010-08-22 16:13:04

标签: java arraylist

假设我在ArrayList中有两个相同的字符串...有没有办法检查?还有一种方法可以检查ArrayList中相同精度字符串的次数吗?

所以我想说我有以下的ArrayString。

os.println(itemIDdropped + "|" + spawnX + "|" + spawnY + "|" + currentMap + "|drop|" + me.getUsername());
1. 1|3|5|1|drop|Dan
2. 2|5|7|2|drop|Luke
3. 1|3|5|2|drop|Dan
4. 3|3|5|1|drop|Sally

以下是1-4个字符串的数字/字母含义... 项目ID,X pos,Y pos,Map it's on,命令drop,放弃它的用户

然后让我说我把它分开了:

String[] itemGrnd = serverItems.get(i).split("\\|");

现在,假设我有一个像这样的for循环:

for (int i = 0; x < serverItems.size(); i++) {
    System.out.println(serverItems.get(i));
}

我想找到X,Y和Map的位置,或者在这种情况下,itemGrnd [1],itemGrnd [2]和itemGrnd [3]在我通过serverItems.get找到的ArrayList中的任何其他字符串中是相同的( i)中。

如果我们找到任何......(在我上面提供的示例中...... x,y和map对于1和4都是相同的......然后创建一个IF语句来执行它...因为我不想这样做: (顺便说一句,我确实跟踪客户端的变量,所以不要担心。是的我知道它的名字叫spawnX和spawnY ..那只是当前的X,Y。

if (spawnX.equals(Integer.parseInt(itemGrnd[1])) && 
    spawnY.equals(Integer.parseInt(itemGrnd[2])) &&
    currentMap.equals(Integer.parseInt(itemGrnd[3]))) {
}

现在,如果我要这样做...... 1和4通过这里处理。如果我们找到多个字符串(如1和4)

,我只想在ONCE上做

由于

3 个答案:

答案 0 :(得分:1)

嗯,很容易找出String ArrayList有多少:

public class ArrayListExample {
    private static final String TO_FIND = "cdt";

    public static void main(String[] args) {
        ArrayList<String> al = new ArrayList<String>();
        al.add("abc");
        al.add("dde");
        //4 times
        al.add(TO_FIND);
        al.add(TO_FIND);
        al.add(TO_FIND);
        al.add(TO_FIND);

        ArrayList<String> al1 = (ArrayList<String>) al.clone();
        int count = 0;
        while (al1.contains(TO_FIND)) {
            al1.remove(TO_FIND);
            count++;
        }
        System.out.println(count);
    }
}

答案 1 :(得分:0)

更快的方法是对ArrayList进行排序,然后查看有多少不同的元素。 Denis_k解是O(n ^ 2),排序是O(nlog(n))。

答案 2 :(得分:0)

如果您想要这种行为,您可能需要检查Apache Commons / Collections项目,该项目通过一些有用的接口扩展了默认的Java集合,包括the bag interfaceJavaDoc),似乎是你正在寻找的东西:一个知道它包含多少元素的集合。缺点:尚未支持泛型,因此您正在使用原始集合。

Google Guava,这是一个更现代的图书馆,有一个类似的概念,名为MultiSet,可能更加用户友好。然而,番石榴还没有发布版本,尽管它已经广泛用于生产。

哦,还有一个标准的JavaSE函数:Collections.frequency(Collection, Object),虽然它可能表现不佳。