java - 检查列表中的相同值

时间:2010-11-25 21:16:25

标签: java list

我有一个列表,其中创建了一定数量的“乌龟”。这只是一些代码,而不是全部。

int nrTurtles = Keyboard.nextInt("How many turtles to create: ");
w = new GraphicsWindow(500, 300);
for (int k = 1; k <= nrTurtles; k++) {
        Turtle t = new Turtle(w, 50, 50 + 10*k);
            turtles.add(t);
}

每只乌龟都有一个我可以得到的协调值(例子):

turtles.get(0).getX() //this gets turtle nr 1 position

现在我如何以聪明的方式检查两只或更多只海龟,具体取决于列表中的数量具有相同的协调值 a修正值450 )?

如果两个或更多具有相同的值(450),我想用 system.out.print 写“turtle1和turtle2就是那个”,如果碰巧turtle1和turtle2具有相同的值。

如果只有一只乌龟的值为(450)且没有其他,我只想写那只乌龟,例如。 “turtle1是唯一一个”。

3 个答案:

答案 0 :(得分:1)

我会创建一个像这样的结构(伪代码):

HashTable{
  450 => Array{ 1, 5 },
  300 => Array{ 2 },
  150 => Array{ 3, 4, 6 } 
}

其中键是协调值,值是包含它的乌龟数组。

填写结构:

for each turtle:
  get coord value
  do we have it as a key yet?
    no: create coord.value => empty array
  insert turtle id into coord.value array

将其打印出来只需要迭代它。

答案 1 :(得分:1)

您可以使用Map<Integer, Set<Turtle>>

,键是X坐标。看看如何使用HashMaps:

基本上,循环遍历所有海龟并将其添加到地图中。类似的东西:

Map<Integer, Set<Turtle>> map = new HashMap<Integer, Set<Turtle>>();
for(Turtle t: turtles) {
   Set<Turtle> set = m.get(t.getX());
   if(set == null) {
      s = new HashSet<Turtle>();
      map.put(t.getX(), set);
   }
   map.put(t.getX(), set);
}

然后你只需浏览元素,看看是否还有一个元素:

for(Map.Entry<Integer, Set<Turtle>> e: map.entrySet()) {
   Set<Turtle> set = e.getValue();
   if(set.size() > 1) {
       System.out.println("These turtles have the same X coordinate:");
       for(Turtle t: set) {
          System.out.println(t);
       }
   }
}

答案 2 :(得分:0)

最简单的方法是迭代列表并比较相关值,如果匹配则将匹配的海龟添加到结果列表中。

除非对海龟列表进行排序,否则你几乎只能将迭代作为搜索列表的技术。

第二次编辑:

ArrayList<Turtle> results = new ArrayList<Turtle>();

for (int i = 0; i < nrTurtles; i++) {

    if (turtles.get(i).getX() == 450) {

        results.add(turtles.get(i));
    }
}

if (results.size() == 0) {

    // No turtles are at 450

} else if (results.size() == 1) {

    // Turtle is alone at 450

} else {

    // Turtles are all at 450
}