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);
}
}