2011-09-25 130 views
1

是不是某种可能性得到List视图List与原始列表中的元素,修改元素,例如设置属性,但原始列表应该反映更改?排序的列表视图

背景是我正在排序两个列表,然后对于每个相等的元素我设置一个属性(基本上是交集),但最后我需要与修改元素的未排序列表。

亲切的问候,
约翰内斯

回答

1

可能是最简单的做法是元素添加到一个新的列表,那种列表,当你修改的元素,原有元素仍将被修改......

List<?> origA; 
List<?> origB; 

List<?> newA = new ArrayList<?>(origA); 
List<?> newB = new ArrayList<?>(origB); 

Collections.sort(newA); 
Collections.sort(newB); 

// do mods 
+0

是的,很显然这是正确的。 ..我的大脑肯定已经很短时间了,因为它迟到或类似的东西;-) – Johannes

1

如果List持有的对象(不是原始数据类型)的引用,然后刚才复制的列表,排序,并修改的元素。

1

它是否必须是一个列表?如果将元素保留在TreeSet中,即使在添加/删除元素后,它们也会在遍历它们时始终进行排序。请记住,修改已在TreeSet中的元素可能会破坏排序顺序。您可以移除该元素并将其添加到TreeSet以解决该问题。

如果您必须使用列表,则可以在添加或修改元素后使用Collections.sort(List list)。当然,如果你不得不经常打电话,会有性能问题。如果性能是一个问题,您可以插入新元素(或移动修改的元素)以维护排序顺序,这将比分类排序更便宜:O(n)vs O(n * log(n))