Best collection in Java for user defined object to search using two comparators
Best collection in Java for user defined object to search using two comparators
我想要 Java 中的 collection 可以更快地搜索并使用两个比较器(一个比较 [=23= 的 Int 成员,另一个比较 [=23= 的 String 成员) ]).
任何 collection 都可以吗?
其次,我将从 db2 加载数据到 object 的 collection(包含 2 个 Int、2 个字符串和 2 个 object 引用)。从数据库加载的行数最多可达 10000。那么是否会出现与内存相关的问题或 JVM 是否会管理它?
正如你所说,你可以定义两个比较器。
import java.util.Comparator;
public class MyObject {
private final int intProperty;
private final String stringProperty;
public MyObject(int intProperty, String stringProperty) {
this.intProperty = intProperty;
this.stringProperty = stringProperty;
}
public int getIntProperty() {
return intProperty;
}
public String getStringProperty() {
return stringProperty;
}
public static final Comparator<MyObject> intComparator = new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getIntProperty() == o2.getIntProperty() ? 0 : (o1.getIntProperty() < o2.getIntProperty() ? -1 : 1);
}
};
public static final Comparator<MyObject> stringComparator = new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStringProperty().compareTo(o2.getStringProperty());
}
};
};
制作一个可变列表,这是唯一的输入 Collections.sort
将接受:
List<MyObject> objects = new ArrayList<>(Arrays.asList(new MyObject(1, "xyz"), new MyObject(2, "abc")));
然后:
Collections.sort(myObjects, MyObject.intComparator); // (1, "xyz"), (2, "abc")
或:
Collections.sort(myObjects, MyObject.stringComparator); // (2, "abc"), (1, "xyz")
您还可以将这些比较器与其他常见数据结构一起使用:
SortedSet<MyObject> objectSet = new TreeSet<>(MyObject.intComparator);
objectSet.addAll(Arrays.asList(new MyObject(1, "c"), new MyObject(2, "b"));
我想要 Java 中的 collection 可以更快地搜索并使用两个比较器(一个比较 [=23= 的 Int 成员,另一个比较 [=23= 的 String 成员) ]).
任何 collection 都可以吗?
其次,我将从 db2 加载数据到 object 的 collection(包含 2 个 Int、2 个字符串和 2 个 object 引用)。从数据库加载的行数最多可达 10000。那么是否会出现与内存相关的问题或 JVM 是否会管理它?
正如你所说,你可以定义两个比较器。
import java.util.Comparator;
public class MyObject {
private final int intProperty;
private final String stringProperty;
public MyObject(int intProperty, String stringProperty) {
this.intProperty = intProperty;
this.stringProperty = stringProperty;
}
public int getIntProperty() {
return intProperty;
}
public String getStringProperty() {
return stringProperty;
}
public static final Comparator<MyObject> intComparator = new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getIntProperty() == o2.getIntProperty() ? 0 : (o1.getIntProperty() < o2.getIntProperty() ? -1 : 1);
}
};
public static final Comparator<MyObject> stringComparator = new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStringProperty().compareTo(o2.getStringProperty());
}
};
};
制作一个可变列表,这是唯一的输入 Collections.sort
将接受:
List<MyObject> objects = new ArrayList<>(Arrays.asList(new MyObject(1, "xyz"), new MyObject(2, "abc")));
然后:
Collections.sort(myObjects, MyObject.intComparator); // (1, "xyz"), (2, "abc")
或:
Collections.sort(myObjects, MyObject.stringComparator); // (2, "abc"), (1, "xyz")
您还可以将这些比较器与其他常见数据结构一起使用:
SortedSet<MyObject> objectSet = new TreeSet<>(MyObject.intComparator);
objectSet.addAll(Arrays.asList(new MyObject(1, "c"), new MyObject(2, "b"));