Tôi thật sự không khuyên bạn sử dụng (Linked)HashMultiSet
để làm nhiệm vụ đó thường được thực hiện với ArrayList
và (Linked)HashSet
như OP đề cập ở trên - nó ít dễ đọc hơn đối với lập trình Java thông thường và (có thể) kém hiệu quả hơn.
Thay vào đó, ít nhất là sử dụng nhà thầu nhà máy tĩnh như newArrayList
và newLinkedHashSet
để tránh tất cả những <T>
s:
private static <T> List<T> removeDuplicate(final List<T> list) {
return Lists.newArrayList(Sets.newLinkedHashSet(list));
}
Tuy nhiên, bạn có thể làm điều đó trong nhiều "ổi cách" - bởi avoiding nulls và sử dụng immutable collections.
Vì vậy, nếu bộ sưu tập của bạn không thể có yếu tố null, tôi muốn đề nghị sử dụng immutable set thay vì mutable and less efficient one:
private static <T> List<T> removeDuplicate(final List<T> list) {
return Lists.newArrayList(ImmutableSet.copyOf(list));
}
Nó vẫn sao chép đối tượng hai lần, nên xem xét là hoàn toàn không thể thay đổi và thay đổi phương pháp chữ ký để trở lại ImmutableList
:
private static <T> ImmutableList<T> removeDuplicate(final List<T> list) {
return ImmutableSet.copyOf(list).asList();
}
Bằng cách này chỉ có một sao chép liên quan, vì ImmutableCollection.asList()
trả một cái nhìn.
lý do tại sao bạn muốn đi cho ổi, nếu thiết lập cơ bản thực hiện điều này? –
và trong thời trang ngắn gọn như vậy, quá – Thilo
@PriyankDoshi tại sao không chỉ 'HashSet'? – oldrinb