如何去掉list里重復的數據


去掉list重復的數據,目前總結的以下三種方法,分別是采用set集合來做、兩層循環不用任何方法來做,以及一層循環采用contains()方法來做,如下:

1.采用set結合來做:

package test;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;


public class Test1 {

//采用set來做,因為set是不重復的
public static void main(String[] args) {
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(3);
list.add(2);
list.add(1);
System.out.println(list);

//上面的list里裝的有重復的數據,我要用set來去掉重復

Set<Integer> set=new HashSet<Integer>(list);
System.out.println(set);//這里的set里的值已經是去掉了重復的了,如果我還想要將原有的list去重復,如下:
System.out.println(list);
list.clear();//將原來的list的數據全部清空
System.out.println(list);
list.addAll(set);//將set集合的值放入到list里,因為set里是沒有重復的了,這個時候list也就沒有重復的了
System.out.println(list);
}

}

 

2.采用雙重循環來做:

package test;

import java.util.ArrayList;
import java.util.List;

public class Test2 {

//方法二:采用循環來做
public static void main(String[] args) {
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(3);
list.add(2);
list.add(1);
list.add(1);
list.add(4);
list.add(4);
System.out.println(list);

for (int i = 0; i < list.size()-1; i++) {//從第一個數開始,到最后一個數-1次循環
for (int j = list.size()-1; j >i;j--) {//從最后一個數開始到i+1
if(list.get(i)==list.get(j)){
list.remove(j);//這里的remove里的參數j就是角標,通過角標移除數據
}
}System.out.println(list);
}
System.out.println();
System.out.println(list);
}

}

 

3.采用contains()方法來做,一層循環即可解決問題:

package test;

import java.util.ArrayList;
import java.util.List;


public class Test3 {

public static void main(String[] args) {
//測試方法
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(3);
list.add(2);
list.add(1);
list.add(1);
list.add(4);
list.add(4);
System.out.println(list);
List<Integer> newList = getNewList(list);
System.out.println(newList);

}
/**
*
* 采用contains()方法
* @param list
* @return list
* 說明:我需要一個不重復的list,那么我循環你給我的帶重復數據的list,只有滿足我新的list里不包含重復list里的值的時候,我再把獲取的原list的值放的我新的list里,
* 也就是如果我的新的list有了值,那么我就不向像新的里面添加值了。
*/
public static List<Integer> getNewList(List<Integer> list){
List<Integer> myList=new ArrayList<Integer>();
for (int i = 0; i < list.size(); i++) {
if(!myList.contains(list.get(i))){
myList.add(list.get(i));;
}
}

return myList;
}
}

 

4.還是雙重循環,也不用方法二來做

/**
* @author yanxu
*用雙重循環去掉重復,不用任何方法,也不用那個:外層 循環從0到長度-1,后面那個相反的那個
*/
public static List<Integer> getDistinctList(List<Integer> list){
List<Integer> newList = new ArrayList<Integer>();
for (int i = 0; i < list.size(); i++) {
//標識,方便下面使用
boolean flag = false;
//只要新的list里包含循環到的值,就說明重復了。
for(int j = 0; j<newList.size(); j++){
if(list.get(i) == newList.get(j)){
flag = true;
//找到一次就可以退出了 ,不需要再進行額外的次數;而且這里也不會再出現第二次 。
break;
}
}
if(!flag){
newList.add(list.get(i));
}
}
return newList;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM