List集合対象のデリバリー-プロジェクト実戦

10476 ワード

プロジェクト開発でサードパーティのデータソースからデータを取得する問題は、以前は多くのアルゴリズムを見ていましたが、初めて実践的なシーンで使用しました.ハハ、効率は低いですが、まだ受け入れられます.
  • 1ビジネスシーン
  • 2アルゴリズム分析
  • 3アルゴリズム構想
  • 4コード



  • 1ビジネスシーン:
    氏名によると、総借金と返済済み金額の一部は、口座表で現在のユーザーの総借金と返済済み金額を初期化します.(1)ケースデータ:存在データセット、各データセットは3つの属性を含む:名前(name)総借金(total)すでに一部の金額(part)王400 100王200 100王300 100小芳500 200李600 100王600正常な順序400 100、300(400-100)100、200(300-100)100、しかし、私たちはデータセットから取り出してセット(list)に保存します.私がしなければならないのは、現在のlistセットから各ユーザーの現在の総借金と返済済みの金額を取得することです.
    2アルゴリズム分析:
    一般的なデリバリー方法の1つは集合setを利用することであり,もう1つはlist自体のcontain方法である(もちろん他の方法もある).setとlistは基本タイプを比較する場合、いずれも値比較であり、参照タイプを比較する場合、比較も「値」比較であり、この値はオブジェクトのアドレス比較を指す.
    3アルゴリズムの考え方:
    (1)step 1:コピー集合,集合A,B,2つの集合のデータは同じで,1つは検索要素(A)とし,1つは結果集合(B)とする(最初は集合のデータは同じであったが,私がしなければならないのは集合の同じユーザが現在持っている総額と借金ではないことを取り除くことである).(2)step 2:集合Aをループし,集合Aから1つのオブジェクト(t)を取り出し,集合Bでオブジェクト(t)のname属性を検索し,tの属性と同じであれば中間集合tempに追加する.(3)step 3:中間集合tempで総借金と返済済み金額の最新値を検索し、オブジェクトu(4)step 4:コレクション(B)とオブジェクトuのname属性が同じオブジェクトを削除し、次にuオブジェクトをコレクションBに追加する->コレクション内の属性値を削除するには、コレクション内のオブジェクトを削除する際にコレクションの長さが変化することに注意する必要がある.forループで問題がある可能性があります.
    4コード
      
    
    public class User {
        private String  name;
        private int part;
        private int total;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getPart() {
            return part;
        }
    
        public void setPart(int part) {
            this.part = part;
        }
    
        public int getTotal() {
            return total;
        }
    
        public void setTotal(int total) {
            this.total = total;
        }
    }

    テスト
    public class Test {
    
        public static void main(String[] args) {
            //step1
            List list1 =  add();
            List list2 = new ArrayList();
            list2.addAll(list1);
            for(int i=0;i
                User u1 =   list1.get(i);
                //step2
                List temp = new ArrayList();
                for(int j=0;j
                    User u2 = list2.get(j);
                    if(u1.getName().equals(u2.getName())){
                        temp.add(u2);
                    }
                }
                //step3
                if(temp.size()>1){
    
                    User user = new User();
                    int hei = 0;
                    int age = 0;
                    for(int j=0;j
                        if(j == 0 ){
                            hei = temp.get(0).getTotal();
                            age = temp.get(0).getPart();
                            user.setName(temp.get(0).getName());
                        }
                        User u  = temp.get(j);
                        if(hei > u.getTotal()){
                            hei = u.getTotal();
                            age = u.getPart();
                        }
                    }
                    user.setTotal(hei);
                    user.setPart(age);
    
                    //step4
                    Iterator it = list2.iterator();
                    while(it.hasNext()){
                        User uu = it.next();
                        if(uu.getName().equals(user.getName())){
                            it.remove();
                        }
                    }
                    list2.add(user);
                }
            }
            for(User uuu :list2){
                System.out.println(uuu.getName()+" "+ uuu.getPart()+" "+uuu.getTotal());
            }
    
        }
    
        public static List add() {
            List list =new ArrayList();
            User u1 = new User();
            u1.setName("wang");
            u1.setPart(100);
            u1.setTotal(400);
            User u2 = new User();
            u2.setName("wang");
            u2.setPart(100);
            u2.setTotal(300);
            User u3 = new User();
            u3.setName("wang");
            u3.setPart(100);
            u3.setTotal(200);
            User u4 = new User();
            u4.setName("ma");
            u4.setPart(27);
            u4.setTotal(177);
            User u5 = new User();
            u5.setName("fa");
            u5.setPart(27);
            u5.setTotal(177);
            list.add(u1);
            list.add(u2);
            list.add(u3);
            list.add(u4);
            list.add(u5);
            return list;
        }
    }
    

    拡張:アルゴリズム構想ではstep 1,step 2,step 4は変わらず,step 3:temp中の集合をtotalに基づいて比較し,並べ替え,comparator集合外部で実現した並べ替えとcomparable集合内部で定義した方法で実現した並べ替えを最小に取り出すことができる.