1. 程式人生 > >兩個LIST合併問題

兩個LIST合併問題

  前些日子在做專案時,做到兩個大LIST合併的問題,由於時間比較緊沒有時間仔細琢磨一下效率問題。剛好從CSDN的論壇上看到此問題。
   有兩個LIST
      ArrayList <Integer> list1=new  ArrayList <Integer>();
  
   list1.add(13);
   list1.add(23);
   list1.add(33);
   list1.add(43);
   list1.add(53);
   ArrayList <Integer> list2=new  ArrayList <Integer>();
   list2.add(14);
   list2.add(24);
   list2.add(34);
   list2.add(43);
   list2.add(53);
合併成一個LIST,要求去掉相同的資料。
  1:用(Array)List.removeAll/addAll,保留順序;
  2:用TreeSet;
  3:用hashset;
 先談論一下基本使用方法,對基礎方法的一個補充:
先寫個列印方法:
 public static void printlnList(ArrayList <Integer> list1,String str){
   System.out.print(str+"=>");
   //for(int i=0;i<list1.size(); i++){
  //  System.out.print(list1.get(i)+",");
  // }
   for(Iterator <Integer> inte=list1.iterator();inte.hasNext();){
   System.out.print(inte.next().toString()+",");
   }
   System.out.println(" ");
  }
 1:用(Array)List.removeAll/addAll
  程式碼:
   public static void ArrayListSort(ArrayList <Integer> list1,ArrayList <Integer> list2){
   //(Array)List.removeAll/addAll/retainAll
  printlnList(list1,"org list1");
  printlnList(list2,"org list2");
  ArrayList <Integer> newList=new  ArrayList <Integer>();
  ArrayList <Integer> newList2=new  ArrayList <Integer>();
  ArrayList <Integer> newList3=new  ArrayList <Integer>();
  newList2.addAll(list1);
  newList3.addAll(list2);
  newList2.removeAll(newList3);
  newList.addAll(newList2);
  newList.addAll(newList3);
  printlnList(newList,"newList");
 
  }
    開發過程中遇到的問題:
  
      1): 想組合成新的LIST後原始的兩個LIST值不發生改變
      ArrayList <Integer> newList2=list1;
      newList2.removeAll(list2);
      出現問題是list1的值發生改變,操作list1運算就是操作list1;
     要達到這種效果是:
   
      ArrayList <Integer> newList2=new  ArrayList <Integer>();
      newList2.addAll(list1);
     2):retainAll是將list1和list2相同的值找出來
        list1.retainAll(list2);

2:用hashset;效率比較高
    public static void hashListSort(ArrayList <Integer> list1,ArrayList <Integer> list2){
   printlnList(list1,"org list1");
   printlnList(list2,"org list2");
   HashSet hash = new HashSet(list2);
  hash.removeAll(list1);
  printlnList(list2,"new list2");
   list1.addAll(hash);
   printlnList(list1,"hashListSort list1");
  }
   1): 想組合成新的LIST後原始的兩個LIST值不發生改變,可以直接用
     HashSet hash = new HashSet(list2);

   2):retainAll是將list1和list2相同的值找出來
        hash.retainAll(list2);
3:用TreeSet,結果自動從小到大排序;
 public static void TreeSetSort(ArrayList <Integer> list1,ArrayList <Integer> list2){
   printlnList(list1,"org list1");
   printlnList(list2,"org list2");
   Set set = new TreeSet();
   set.addAll(list1);
   set.addAll(list2);
   Set set1 = new TreeSet(list1);
   Set set2 = new TreeSet(list2);
   set1.removeAll(set2);
   printlnList(new ArrayList(set1),"TreeSetSort set1");
   printlnList(list1,"TreeSetSort list1");
   printlnList(new ArrayList(set),"TreeSetSort list");
  }
  1): 想組合成新的LIST後原始的兩個LIST值不發生改變,可以直接用
       Set set1 = new TreeSet(list1);
     
   2):retainAll是將list1和list2相同的值找出來
        set1.removeAll(set2);和set1.removeAll(list2)效果一樣;

相關推薦

List合併去重,並排序

一:去重 在工作中,我們經常需要對兩個List進行合併去重,對於List中的資料不同,有不同的處理方式。 1.List中是基礎資料型別 List<Integer> list1 = new ArrayList&

list 合併後去除掉重複removeAll()的,然後再隨機獲取最後list中的 幾

public static void test1(){ String s1="1,2,5,3,6,9"; String n1[]=s1.split(","); System.out.println("n1length="+n1.length); String s2="2,3";

List合併為一個List(並集)+取交集

並集 List<Integer> questionerIdList = new ArrayList<Integer>(); List l1 = sysuserinfMapper

list合併為列表物件

為了將兩個list資料對應起來方便前端進行處理。 需求:第一個圖片對應於第一個視訊作為視訊的封面。 兩個陣列:List< String > imgList, List< String > videoList 視訊多於圖片時不返回視訊 由於前期資料結構設

LIST合併問題

  前些日子在做專案時,做到兩個大LIST合併的問題,由於時間比較緊沒有時間仔細琢磨一下效率問題。剛好從CSDN的論壇上看到此問題。   有兩個LIST      ArrayList <Integer> list1=new  ArrayList <Integ

list合併為一個,缺少的填0,並按其中一個的順序排列

with cte as (      select id,1 level,name from ts_dictionary where parentid=''63"      union all      select g.id,level +1,g.name from

在python中如何將list合併成一個list,不用for語句

除了直接相加(生成新的list),還有兩種方法(修改其中一個list): 用list的extend方法,L1.extend(L2),該方法將引數L2的全部元素新增到L1的尾部,例如: 1 2 3 4 5 >>> L1 = [1, 2, 3, 4, 5] >

在Java中,如何把String[]合併為一個 與 list 合併有異曲同工之妙

在Java中,如何把兩個String[]合併為一個? 看起來是一個很簡單的問題。但是如何才能把程式碼寫得高效簡潔,卻還是值得思考的。這裡介紹四種方法,請參考選用。 一、apache-commons 這是最簡單的辦法。在apache-commons中,有一個ArrayUtils.addAll

Java 合併list並按照某個欄位排序

public static void main(String[] args) { List<ReplyInfo> replyInfos1 = new ArrayList<>(); ReplyInfo r1 = new ReplyInfo();

Java list資料根據某個欄位合併

之前遇到一個需求,欄位是每小時那種(2018101208)。然後服務給我資料少了部分。然後我需要自已推算。然後補上沒有那些小時為單位的資料。這裡面也涉及到了自已設計出來資料list是全面的。所有的小時都有。然後把伺服器獲取list根據這個進行對比,補上伺服器沒有的小時數。兩個

c# 將List集合合併

List<int> listA = new List<int> {1,2,3,5,7,9}; List<int> listB = new List<int> {13,4,17,29,2}; List<int> Re

合併list集合並且排序

集合合成的話List<Article> list1 = new ArrayList<Article>();  /*.....新增資料.......*/List<Articl

合併List集合

/第一個list集合          List<String> list_a=new ArrayList<String>();          list_a.add("A");          list_a.add("B");         

合併List集合。有相同的元素只存在一次

//第一個list集合 List<String> list_a=new ArrayList<String>(); list_a.add("A"); list_a.a

合併list資料集合

將兩個不同型別的list合併 思路 建立一個總的zlist 然後定義一個物件 分別遍歷兩個list1,list2給定義的物件賦值  並將物件加到定義好的總的zlist中 List<DrawAn

List根據某個相同欄位來進行合併,排序

業務類簡介: public class ChannelSituation implements Serializable {     private Long id;     private Date date;//日期

java 合併list 並去重

上程式碼:程式碼寫得糙,但是能表達意思: public static void main(String[] args) throws Exception {        List list1 =new ArrayList();        List list2 =new ArrayList();     

工具類:關於如何找到List數組中不同的數據的算法!

開發人員 uri print clas 數據結構 blank _id integer public 找到兩個List數組中不同的數據的算法! import java.util.ArrayList;import java.util.HashMap;import java.ut

python判斷list包含關系

nbsp 判斷 span bsp pan 包含 spa num list a = [1,2] b = [1,2,3] c = [0, 1] set(b) > set(a) set(b) > set(c) python判斷兩個list包含關系

python list 求交集,並集,差集

pytho 列表解析 int __main__ class clas etc intersect run def diff(listA,listB): #求交集的兩種方式 retA = [i for i in listA if i in listB]