最近項(xiàng)目中需要對list集合中的重復(fù)值進(jìn)行處理,,大部分是采用兩種方法,,一種是用遍歷list集合判斷后賦給另一個(gè)list集合,,一種是用賦給set集合再返回給list集合。
但是賦給set集合后,,由于set集合是無序的,原先的順序就打亂了。所以我又想著能不能用set的特性進(jìn)行去重又不打亂順序呢,?
試了一下,也是可以的,,幾種方法在不同情況下都有各自的優(yōu)勢?,F(xiàn)在將代碼寫出來,比較一下,。
//set集合去重,,不打亂順序
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("aaa");
list.add("aba");
list.add("aaa");
Set set = new HashSet();
List newList = new ArrayList();
for (String cd:list) {
if(set.add(cd)){
newList.add(cd);
}
}
System.out.println( "去重后的集合: " + newList);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
//遍歷后判斷賦給另一個(gè)list集合
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("aaa");
list.add("aba");
list.add("aaa");
List<String> newList = new ArrayList<String>();
for (String cd:list) {
if(!newList.contains(cd)){
newList.add(cd);
}
}
System.out.println( "去重后的集合: " + newList);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
//set去重
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("aaa");
list.add("aba");
list.add("aaa");
Set set = new HashSet();
List newList = new ArrayList();
set.addAll(list);
newList.addAll(set);
System.out.println( "去重后的集合: " + newList);
}
//set去重(縮減為一行)
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("aaa");
list.add("aba");
list.add("aaa");
List newList = new ArrayList(new HashSet(list));
System.out.println( "去重后的集合: " + newList);
}
hashset不進(jìn)行排序,還有一種方法是用treeset,,去重并且按照自然順序排列,,將hashset改為treeset就可以了。(原本的順序是改變的,,只是按照字母表順序排列而已)
//去重并且按照自然順序排列
List newList = new ArrayList(new TreeSet(list));
|