java数组包含对象

java数组包含对象,java,indexof,Java,Indexof,我有 用于简单字符串数组。我试过了 int first = pgetName.indexOf(selectedName); int last = pgetName.lastIndexOf(selectedName); 及 例如,但它们不起作用。我怎么做我想做的事?这是先进的Java对我来说是一个noob 提前感谢,这里有另一种方法(可能有点过分,但它向您展示了另一种方法)。其思想是重写indexOf和lastIndexOf方法,以便根据字段“name”进行验证: 对于任何Java对象,您都可以

我有

用于简单字符串数组。我试过了

int first = pgetName.indexOf(selectedName);
int last = pgetName.lastIndexOf(selectedName);

例如,但它们不起作用。我怎么做我想做的事?这是先进的Java对我来说是一个noob

提前感谢,

这里有另一种方法(可能有点过分,但它向您展示了另一种方法)。其思想是重写indexOf和lastIndexOf方法,以便根据字段“name”进行验证:


对于任何Java对象,您都可以重写方法equals和hashCode(实际上没有使用这两种方法,但通常实现这两种方法是一种很好的做法),以便使用Java.util.List的indexOf和lastIndexOf函数

eclipse的上下文菜单生成这两种方法的默认实现,让您选择应该在哪个字段上进行比较。试试看


在实现上述方法后,您可以使用indexOf on List。

如果我理解您的问题,您希望“找到对象的索引,其中对象的属性之一是特定值”

这在Java(或大多数语言FWIW)中是不可能直接实现的。但是,使用for循环可以非常简单地实现它:

First: 0 - Last: 3
如果要查找索引,可以执行类似的操作:

public MyObject findObjectByName(MyObject[] objects, String name) {
    for (MyObject object: objects) {
       if (object.name.equal(name) {
          return object;
       }
    }

    return null;
}
public int findObjectIndex(MyObject[]对象,字符串名){
对于(int i=0;i
现在,这是您可以采取的最简单的方法,并且通常是,但并非总是,最好的方法。如果您有大量的对象,并且需要按名称查找很多对象,那么最好只构建一次索引,然后按索引查找:

public int  findObjectIndex(MyObject[] objects, String name) {
    for (int i = 0; i < objects.length; ++i)
       if (objects[i].name.equal(name) {
          return i;
       }
    }

    return -1;
}
公共类MyObjectIndex{
final Map byName=新HashMap();
公共MyObject索引(MyObject[]对象){
用于(MyObject对象:对象){
byName.put(object.getName(),object);
}
}
公共getMyObjectWithName(字符串名称){
返回byName.get(name);
}
}

你说的“它们不起作用”是什么意思?你的预期结果和实际结果是什么?你需要一个循环。对于每个元素,检查它是否匹配。
列出pgetName
你是在询问列表还是数组?@reggaeguitar,我希望它能将索引点返回到列表中的第一个和最后一个元素,其中pgetName.name()=“ABC”@martijnn2008,谢谢,我不希望这样做…他可能只是想要一个HashMap,键入名称值,除非有特殊原因他需要索引。我怀疑他不需要。好的,我不明白。@spudone这个列表是从第三方软件中提取的,只是作为一个有序的列表,HashMap和Map可以工作,但是t将需要转换,这将是性能自杀。将其复制到HashMap一次,然后进行查找,比在每次查找时循环它更快。这只是一个选项。请注意,最终列表将包含>3000个条目,无法保存在内存中(不是我的强项,使用Tomcat进行此代码)并且可以每隔几分钟更新一次。我对它的阅读可能在每秒1到每分钟1次之间…无论如何,谢谢。标记为正确,因为它完全符合我的要求。非常感谢和节日的问候。
    private static class TestObject {

    String id, name, version;

    public TestObject(String id, String name, String version) {
        super();
        this.id = id;
        this.name = name;
        this.version = version;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getVersion() {
        return version;
    }
}

public static void main(String[] args) {

    List<TestObject> pgetName = new ArrayList<TestObject>() {
        @Override
        public int indexOf(Object o) {
            if (o == null || this.isEmpty()) {
                return -1;
            }
            int counter=0;
            for (TestObject current : this) {
                if (o.equals(current.getName())) {
                    return counter;
                }
                counter++;
            }
            return -1;
        }

        @Override
        public int lastIndexOf(Object o) {
            if (o == null || this.isEmpty()) {
                return -1;
            }
            for (int i=this.size()-1; i>=0;i--) {
                TestObject current = get(i);
                if (o.equals(current.getName())) {
                    return i;
                }
            }
            return -1;
        }
    };
    pgetName.add(new TestObject("1", "name1", "ver1"));
    pgetName.add(new TestObject("2", "name2", "ver2"));
    pgetName.add(new TestObject("3", "name3", "ver3"));
    pgetName.add(new TestObject("4", "name1", "ver4"));
    int first = pgetName.indexOf("name1");
    int last = pgetName.lastIndexOf("name1");
    System.out.println("First: " + first + " - Last: " + last);

}
First: 0 - Last: 3
public MyObject findObjectByName(MyObject[] objects, String name) {
    for (MyObject object: objects) {
       if (object.name.equal(name) {
          return object;
       }
    }

    return null;
}
public int  findObjectIndex(MyObject[] objects, String name) {
    for (int i = 0; i < objects.length; ++i)
       if (objects[i].name.equal(name) {
          return i;
       }
    }

    return -1;
}
public class MyObjectIndex {
   final Map<String, MyObject> byName = new HashMap<String, MyObject>();
   public MyObjectIndex(MyObject[] objects) {
       for (MyObject object: objects) {
          byName.put(object.getName(), object);
       }
   }

   public getMyObjectWithName(String name) {
       return byName.get(name);
   }
}