如何仅对Java中的ArrayList中的事物执行操作?

时间:2013-03-10 12:09:13

标签: java arraylist minecraft

这是对我之前的问题的重写,因为我被告知它太长了。

if(/*This is where I need something*/)
{
    mc.thePlayer.swingItem();
    mc.playerController.attackEntity(mc.thePlayer, e);
    delay = 0;
    break;
}

这是Minecraft中KillAura代码的一部分。我试图做到这一点,以便它不针对我做的朋友列表中的人。该列表是名为Variables.java的文件中名为“friendslist”的ArrayList。如果有人能向我解释我是如何让它不针对我朋友列表中的人,我将非常感激。请保持简洁,因为我对java相对较新。

提前致谢。

马特

3 个答案:

答案 0 :(得分:1)

ArrayList对象有一个名为contains的方法。使用此方法,您可以测试对象是否是集合的一部分。阅读documentation

工作示例

ArrayList<People> people = new ArrayList<People>();
// Define the collection.
People p = new People("Dave");
// Create a new test object.
people.add(p);
// Add the object to the collection.
if(people.contains(p))
{
    // Will print out, because P exists within the people collection.
    System.out.println("Object exists in the collection");
}

对我的原始答案的细化

正如评论中所建议的那样,鉴于这是游戏的比较算法,您可能希望对此进行更多优化。考虑到这一点,我想到了HashMap

HashMap示例

HashMap<String, Person> friends = new HashMap<String, Person>();
// Create the HashMap object.
Person p = new Person("Dave");
// Create a test object, with the name "Dave".
String key = p.getName();
// Get a key. In this case, the object's name.
friends.put(key, p);
// Add the person to the collection.

使用此代码,您现在可以在HashMap集合中拥有一个人。现在,当有人走进你的“攻击光环”时,你可以简单地获取该人的名字,并检查你的HashMap中是否存在一个键。这很快(O(1)复杂度)并且准确,最重要的是,您正在比较自定义值;不一样的对象。因此,用户可以回收他们的对象并仍然存储在您的集合中。

希望此编辑有助于:)

答案 1 :(得分:0)

要查找对象是否不在列表中,请使用:

if (!friendslist.contains(otherPlayer))

其中friendslist是您的朋友列表,而otherPlayer是您在朋友列表中查看的玩家。

您可以详细了解listsarraylists

答案 2 :(得分:0)

要告诉所有部分是什么有点困难,但如果friendslist是包含播放器对象的数组列表,并且thePlayer是您正在检查的那个,那么

if (!(friendslist.contains(mc.thePlayer)))