2

再会,

我有一个包含一些数据的集合:

Set< AItem > aItems = aItem
                    .getItems( );

因为我想做一些排序,所以我先转换成list,排序后,再转回set:

List< AItem > tempoAccounts = new ArrayList(aItems);

Collections.sort(tempoAccounts, new Comparator() {
                public int compare(Object arg0, Object arg1) {
                    // sorting logic here
                }
            });

// convert from list back to set
aItems = ImmutableSet.copyOf(tempoAccounts);

这给了我一个正确的结果,我的所有数据都相应地排序。

但是,如果我想将更多项目添加到aItems

AItem aai = new AItem();
            aai.setAId( (long) 2222 );
            aai.setLimit( BigDecimal.ZERO );

然后我会打:

Exception created : [java.lang.UnsupportedOperationException
    at com.google.common.collect.ImmutableCollection.add(ImmutableCollection.java:91)

所以我改变

aItems = ImmutableSet.copyOf(tempoAccounts);

aItems = new HashSet<AItem>(tempoAccounts);

UnsupportedOperationException如果我在这个集合中添加新项目,这不会给我。但是我的排序不见了, Set 没有正确排序。

有什么想法可以对我的 Set 进行排序,然后可以毫无例外地在里面添加更多项目吗?

好心提醒。

4

1 回答 1

2

HashSet应该被视为一个无序集合。如果你想要一个排序集,只需使用TreeSet

Set<AItem> sortedItems = new TreeSet<>(new Comparator<AItem>() { ... });
sortedItems.addAll(aItems);

(不要使用原始类型Comparator,顺便说一句......尽量避免使用原始类型。)

无需创建列表,无需创建不可变集合...

于 2015-09-10T09:19:58.540 回答