假设我在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上做由于
答案 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 interface(JavaDoc),似乎是你正在寻找的东西:一个知道它包含多少元素的集合。缺点:尚未支持泛型,因此您正在使用原始集合。
或Google Guava,这是一个更现代的图书馆,有一个类似的概念,名为MultiSet,可能更加用户友好。然而,番石榴还没有发布版本,尽管它已经广泛用于生产。
哦,还有一个标准的JavaSE函数:Collections.frequency(Collection, Object),虽然它可能表现不佳。