哪种 Java 结构更好用?我需要良好的性能、非固定大小和易于克隆/复制
Which Java structure better to use? I need good performance, non-fixed size, and ease to clone / copy
我想要一个性能良好的数据结构,它允许从一种结构轻松 clone/copy 到另一种结构。我的流程如下所示:
- 拿
list1
,满满的东西。
- 迭代对象,从每个对象创建多个相同类型的对象,并将它们添加到
list2
。
- 删除
list1
中的所有对象并将 list2
中的所有对象添加到 list1
中。
- 删除
list2
中的所有对象。
纠结于选择数据结构,暂时用ArrayDeque
,速度不是很快。对象的数量不固定,所以数组可能不是一个好的选择。
有什么建议吗?这是我的代码:
ArrayDeque<Obj> list1 = new ArrayDeque(),
list2 = new ArrayDeque();
// Iterate over list1
// and add() objects into list2
list1 = list2.clone();
list2.clear();
谢谢!
对于 1000 个对象,您不必太复杂,除非这对性能至关重要或创建 class Obj
的每个对象都是一个漫长的过程。
假设以下(非常 noddy)不可变 Obj
class:
public static final class Obj {
private String property;
public Obj(String property) {
this.property = property;
}
public String getProperty() {
return property;
}
public Obj modify(String newProperty) {
return new Obj(property + newProperty);
}
}
对于 100k 个元素,以下代码执行得非常快:
public static final int NUM_ELEMENTS = 100_000;
public static void main(String[] args) {
//init
ArrayDeque<Obj> source = new ArrayDeque<>(NUM_ELEMENTS);
ArrayDeque<Obj> destination = new ArrayDeque<>(NUM_ELEMENTS);
for(int i = 0; i < NUM_ELEMENTS; i++) {
source.add(new Obj("" + i));
}
//modify
source.stream()
.map(obj -> obj.modify(" V2"))
.forEach(obj -> destination.add(obj));
source.clear();
//print
destination.stream()
.forEach(obj -> System.out.println(obj.getProperty()));
}
我想要一个性能良好的数据结构,它允许从一种结构轻松 clone/copy 到另一种结构。我的流程如下所示:
- 拿
list1
,满满的东西。 - 迭代对象,从每个对象创建多个相同类型的对象,并将它们添加到
list2
。 - 删除
list1
中的所有对象并将list2
中的所有对象添加到list1
中。 - 删除
list2
中的所有对象。
纠结于选择数据结构,暂时用ArrayDeque
,速度不是很快。对象的数量不固定,所以数组可能不是一个好的选择。
有什么建议吗?这是我的代码:
ArrayDeque<Obj> list1 = new ArrayDeque(),
list2 = new ArrayDeque();
// Iterate over list1
// and add() objects into list2
list1 = list2.clone();
list2.clear();
谢谢!
对于 1000 个对象,您不必太复杂,除非这对性能至关重要或创建 class Obj
的每个对象都是一个漫长的过程。
假设以下(非常 noddy)不可变 Obj
class:
public static final class Obj {
private String property;
public Obj(String property) {
this.property = property;
}
public String getProperty() {
return property;
}
public Obj modify(String newProperty) {
return new Obj(property + newProperty);
}
}
对于 100k 个元素,以下代码执行得非常快:
public static final int NUM_ELEMENTS = 100_000;
public static void main(String[] args) {
//init
ArrayDeque<Obj> source = new ArrayDeque<>(NUM_ELEMENTS);
ArrayDeque<Obj> destination = new ArrayDeque<>(NUM_ELEMENTS);
for(int i = 0; i < NUM_ELEMENTS; i++) {
source.add(new Obj("" + i));
}
//modify
source.stream()
.map(obj -> obj.modify(" V2"))
.forEach(obj -> destination.add(obj));
source.clear();
//print
destination.stream()
.forEach(obj -> System.out.println(obj.getProperty()));
}