【Java】去除List中的重複值並按照從小到大排列
阿新 • • 發佈:2019-02-06
一、前言
前幾天,給一個同事寫介面,他的要求是,給我傳來一個List<String> ids
,這個裡面可能有重複的id,需要幫她去重。我想這個用迴圈是比較麻煩的,有什麼簡單的嗎?然後就找到了下面的幾個方法,總結一下。
二、去重思路
兩個思路:
1.遍歷List集合判斷是否在另一個集合中存在,賦值給另一個集合
2.賦值給Set結合,再返回list集合
【知識補充】可能有一些朋友對Set不熟悉,不瞭解Set是什麼?
Set是Collection容器的一個子介面,它不允許出現重複元素,當然也只允許有一個null物件。在這裡大家瞭解,它裡面不能放重複的資訊就行了。
三、去重方法demo
- 方法一: 賦值給另一個list2,判斷list2是否含有要新增的值(最笨)
這裡判斷使用的是,list2.contains(欄位)
。
@Test
public void testMap(){
List<String> list = new ArrayList<String>();
list.add("6");
list.add("2");
list.add("3");
list.add("1" );
list.add("7");
list.add("5");
list.add("2");
list.add("3");
List<String> newList = new ArrayList<String>();
for (String cd:list) {
if(!newList.contains(cd)){
newList.add(cd);
}
}
System. out.println( "去重後的集合: " + newList);
}
結果:可以看出,使用這種方法,可以達到去重的效果,但是集合中是資料依舊是亂的,沒有排序。
去重後的集合: [6, 2, 3, 1, 7, 5]
- 方法二、使用
set.add(欄位)
來判斷能否新增到set中,如果可以新增,也向新的list.add()
中新增一份,不打亂順序。
@Test
public void testMap(){
List<String> list = new ArrayList<String>();
list.add("6");
list.add("2");
list.add("3");
list.add("1");
list.add("7");
list.add("5");
list.add("2");
list.add("3");
Set set = new HashSet();
List newList = new ArrayList();
for (String cd:list) {
if(set.add(cd)){
newList.add(cd);
}
}
System.out.println( "去重後的集合: " + newList);
}
結果:同樣是達到去重,但是沒有排序。
去重後的集合: [6, 2, 3, 1, 7, 5]
- 方法三、使用Set去重
@Test
public void testMap(){
List<String> list = new ArrayList<String>();
list.add("6");
list.add("2");
list.add("3");
list.add("1");
list.add("7");
list.add("5");
list.add("2");
list.add("3");
//set 去重
Set set = new HashSet();
List newList = new ArrayList();
set.addAll(list);
newList.addAll(set);
System.out.println( "去重後的集合: " + newList);
}
結果:網上有朋友說使用HashSet儲存是無順序的,但是小編親測,是有順序的。有待考證
去重後的集合: [1, 2, 3, 5, 6, 7]
網上還有一個朋友說,使用treeSett,可以去重且按照自然順序排列
@Test
public void testMap(){
List<String> list = new ArrayList<String>();
list.add("6");
list.add("2");
list.add("3");
list.add("1");
list.add("7");
list.add("5");
list.add("2");
list.add("3");
//去重並且按照自然順序排列
List newList = new ArrayList(new TreeSet(list));
System.out.println( "去重後的集合: " + newList);
}
四、小結
沒有百不到的,沒有G不到的!
只要自己有想法,百度和谷歌都會有相似的方案,這個就是現在網際網路的特點,小編總結的這些東西也是從網上找到的。加油!