mam*_*ack 5 java collections comparator
我想计算集合之间的差异。使用CollectionUtils.subtract()进行自定义比较时,我需要重写对象的equals()方法。但是,如果我需要比较相同类型但比较标准不同的对象集合怎么办?那么比较器界面呢,似乎非常适合这里?AFAIK比较器主要用于排序。没有使用比较器进行减法的方法吗?
如果您有一个 ArrayList,多次删除可能比获取副本更昂贵。
List<Type> list = /* ArrayList */
Set<Type> toRemove = /* HashSet */
List<Type> copy = new ArrayList<Type>(list.size());
for(Type t: list)
if(!toRemove.contains(t))
copy.add(t);
list = copy;
Run Code Online (Sandbox Code Playgroud)
我个人会使用循环。它可能会更短、更清晰。
Collection<Type> collection =
for(Iterator<Type> i=collection.iterator(); i.hasNext();)
if (i.next() is to be removed)
i.remove();
Run Code Online (Sandbox Code Playgroud)
显式使用 Iterator 的原因是使用 Iterator.remove() 来避免 ConcurrentModificationException。避免这种情况的另一种方法是使用可能首选的集合的副本。
for(Type t : new ArrayList<Type>(collection))
if (t is to be removed)
collection.remove(t);
Run Code Online (Sandbox Code Playgroud)
这虽然表现不佳,但可能表现得足够好。
| 归档时间: |
|
| 查看次数: |
4159 次 |
| 最近记录: |