【问题标题】:Object position in array [duplicate]数组中的对象位置[重复]
【发布时间】:2013-07-18 21:43:38
【问题描述】:

我有一个Objects 数组。现在我的问题是我如何才能从其中找出对象的位置?

我的对象数组

public myObject[] objects = new myObject[10];

myObject的构造函数

public myObject(){
    int objectID = 0; //Here should be the code to find the position in the array
}

【问题讨论】:

  • 先尝试一下,我们会帮你的。
  • 如果对象还没有被构造,它怎么可能在数组中呢?向我们展示真实的代码。您的代码没有多大意义。并尊重 Java 命名约定。

标签: java arrays


【解决方案1】:

您的 MyObject 类应该有一个获取数组并返回 idx 的方法

class MyObject {
   public int findIdx(MyObject[] myObjects) {
        if (myObjects != null) {
            for (int i = 0; i <= myObjects.length; i++) {
                if (myObjects[i].equals(this)) {
                    return i;
                }
            }
        }
        return -1;
    }
}

【讨论】:

    【解决方案2】:

    使用您需要的任何相等性检查,循环遍历您的数组以查找对象的位置。

    编辑: 正如每个人似乎都关心.equals== 我已经改变了执行的例程。如果要检查引用是否相等,请使用findValue(ary, obj, true),否则使用findValue(ary, obj, false)

    这不会找到空值。如果myObject 为空,我建议在这里抛出异常,但我会将这个决定留给你。

    public int findValue(Object[] objects, Object myObject, boolean equalityCheck){
        for(int i=0;i<objects.length;i++){
            if(equalityCheck){
                if(objects[i] == myObject){
                    return i;
                }
            }else{
                if(objects[i]!=null && myObject!=null && objects[i].equals(myObject)){
                    return i;
                }
            }
        }
        return -1;
    }
    

    此代码正在执行线性搜索以查找对象的位置。它在较大的阵列上效率不高。由于您似乎是初学者,因此我不会深入研究如何优化它,但请注意。

    【讨论】:

    • -1 objects == myObject 在这种情况下永远不会起作用(但看起来支持者甚至不理解这种方法的问题)。
    • 语法错误,已修复。小错误。
    • @WilliamMorrison == 比较参考,所以在您使用new ... 的第一刻,您就有了一个全新的参考。现在通过您的编辑,要查看您是否确实将数组的现有元素传递给此方法并不容易。比较对象引用时,应使用equals 而不是==
    • @WilliamMorrison 正如 Luiggi 提到的,您应该在代码中将 == 替换为 .equals。在这种情况下,==总是产生 false。
    • 啊,我的错,你们俩都是对的。自从你的 cmets 以来,代码已经改变了很多次,但我希望你能理解我的困惑。无需人身攻击,它们会显示您的不安全感。
    猜你喜欢
    • 2019-01-20
    • 2021-10-21
    • 2017-08-09
    • 2020-10-16
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    相关资源
    最近更新 更多