<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    和風(fēng)細雨

    世上本無難事,心以為難,斯乃真難。茍不存一難之見于心,則運用之術(shù)自出。

    求集合差的幾種算法

    原題(這里使用了數(shù)組代替集合)

    有兩個數(shù)組:
    String[] arr01={"Andy","Bill","Cindy","Douglas","Felex","Green"};
    String[] arr02={"Andy","Bill","Felex","Green","Gates"};
    求存在于arr01而不存在于arr02的元素的集合?

    最容易想到的解法-雙重循環(huán)

    package com.junglesong;

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

    /**
     * 利用雙重循環(huán)實現(xiàn)的篩選
     * 
    @author: sitinspring(junglesong@gmail.com)
     * @date: 2008-3-8
     
    */

    public class DoubleCycling{
        
    public static void main(String[] args){
            String[] arr01
    ={"Andy","Bill","Cindy","Douglas","Felex","Green"};
            String[] arr02
    ={"Andy","Bill","Felex","Green","Gates"};
            
            
    // 篩選過程,注意其中異常的用途
            List<String> ls=new ArrayList<String>();
            
    for(String str:arr01){
                
    try{
                    ls.add(getNotExistStr(str,arr02));
                }

                
    catch(Exception ex){
                    
    continue;
                }
                
            }

            
            
    // 取得結(jié)果
            Object[] arr03=ls.toArray();
            
    for(Object str:arr03){
                System.out.println(str);
            }

        }

        
        
    /**
         * 查找數(shù)組Arr中是否包含str,若包含拋出異常,否則將str返回
         * 
    @param str
         * 
    @param arr
         * 
    @return
         * 
    @throws Exception
         
    */

        
    public static String getNotExistStr(String str,String[] arr) throws Exception{
            
    for(String temp:arr){
                
    if(temp.equals(str)){
                    
    throw new Exception("");
                }

            }

            
            
    return str;
        }

    }


    速度較高的解法-利用哈希表

    package com.junglesong;

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Hashtable;
    import java.util.List;
    import java.util.Map;

    /**
     * 利用哈希表進行篩選
     * 
    @author: sitinspring(junglesong@gmail.com)
     * @date: 2008-3-8
     
    */

    public class HashtableFilter{
        
    public static void main(String[] args){
            String[] arr01
    ={"Andy","Bill","Cindy","Douglas","Felex","Green"};
            String[] arr02
    ={"Andy","Bill","Felex","Green","Gates"};
            
            
            Map
    <String,String> ht=new Hashtable<String,String>();
            
            
    // 將arr02所有元素放入ht
            for(String str:arr02){
                ht.put(str, str);
            }

            
            
    // 取得在ht中不存在的arr01中的元素
            List<String> ls=new ArrayList<String>();
            
    for(String str:arr01){
                
    if(ht.containsKey(str)==false){
                    ls.add(str);
                }

            }

            
            
    // 取得結(jié)果
            Object[] arr03=ls.toArray();
            
    for(Object str:arr03){
                System.out.println(str);
            }

        }

    }

     

    最方便的解法-利用工具類

     

    package com.junglesong;

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

    /**
     * 使用工具類的篩選去除
     * 
    @author: sitinspring(junglesong@gmail.com)
     * @date: 2008-3-8
     
    */

    public class Tool{
        
    public static void main(String[] args){
            String[] arr01
    ={"Andy","Bill","Cindy","Douglas","Felex","Green"};
            String[] arr02
    ={"Andy","Bill","Felex","Green","Gates"};
            
            
    // 直接轉(zhuǎn)的話,生成的List不支持removeAll
            List<String> ls01=new ArrayList<String>();
            
    for(String str:arr01){
                ls01.add(str);
            }

            
            
    // 同上
            List<String> ls02=new ArrayList<String>();
            
    for(String str:arr02){
                ls02.add(str);
            }

            
            
    // 去除arr01中存在于arr02中的元素
            ls01.removeAll(ls02);
            
            
    // 取得結(jié)果
            Object[] arr03=ls01.toArray();
            
    for(Object str:arr03){
                System.out.println(str);
            }

        }

    }


    利用二叉樹的解法 

    package com.junglesong.binarytree;

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

    /**
     * 使用二叉樹的篩選去除
     * 
    @author: sitinspring(junglesong@gmail.com)
     * @date: 2008-3-8
     
    */

    public class Test{
        
    public static void main(String[] args){
            String[] arr01
    ={"Andy","Bill","Cindy","Douglas","Felex","Green"};
            String[] arr02
    ={"Andy","Bill","Felex","Green","Gates"};
            
            
    // 以數(shù)組2為基礎(chǔ)創(chuàng)建二叉樹
            Tree tree=new Tree();        
            
    for(String str:arr02){
                tree.insert(str);
            }

            
            
    // 將在二叉樹中不存在的元素放入鏈錶
            List<String> ls=new ArrayList<String>();        
            
    for(String str:arr01){
                
    if(tree.find(str)==null){
                    ls.add(str);
                }

            }

            
            
    // 輸出
            for(String str:ls){
                System.out.println(str);
            }

        }

    }

    二叉樹節(jié)點類:
    package com.junglesong.binarytree;

    /**
     * 二叉樹節(jié)點類
     * 
    @author: sitinspring(junglesong@gmail.com)
     * @date: 2008-3-8
     
    */

    public class Node{
        
    private String data;
        
    private Node left;
        
    private Node right;
        
        
    public Node(String data){
            
    this.data=data;
        }


        
    public String getData() {
            
    return data;
        }


        
    public Node getLeft() {
            
    return left;
        }


        
    public Node getRight() {
            
    return right;
        }


        
    public void setData(String data) {
            
    this.data = data;
        }


        
    public void setLeft(Node left) {
            
    this.left = left;
        }


        
    public void setRight(Node right) {
            
    this.right = right;
        }

    }

    二叉樹樹類:
    package com.junglesong.binarytree;

    /**
     * 二叉樹類
     * 
    @author: sitinspring(junglesong@gmail.com)
     * @date: 2008-3-8
     
    */

    public class Tree{
        
    /**
         * 根節(jié)點
         
    */

        
    private Node root;
        
        
    /**
         * 插入一個值
         * 
    @param str
         
    */

        
    public void insert(String str){
            Node node
    =new Node(str);
            
            
    if(root==null){
                root
    =node;
            }

            
    else{
                Node curr
    =root;
                Node parrent;
                
                
    while(true){
                    parrent
    =curr;
                    
                    
    if(str.compareTo(curr.getData())>0){
                        curr
    =curr.getRight();
                        
                        
    if(curr==null){
                            parrent.setRight(node);
                            
    return;
                        }

                    }

                    
    else{
                        curr
    =curr.getLeft();
                        
                        
    if(curr==null){
                            parrent.setLeft(node);
                            
    return;
                        }

                    }

                }

            }

        }

        
        
    /**
         * 尋找一個值對應(yīng)的節(jié)點
         * 
    @param str
         * 
    @return
         
    */

        
    public Node find(String str){
            Node curr
    =root;
            
            
    while(curr.getData().equals(str)==false){
                
    if(str.compareTo(curr.getData())>0){
                    curr
    =curr.getRight();
                }

                
    else{
                    curr
    =curr.getLeft();
                }

                
                
    if(curr==null){
                    
    return null;
                }

            }

            
            
    return curr;
        }

        
        
    /**
         * 輸出
         *
         
    */

        
    public void printAll(){
            inorder(root);
        }

        
        
    /**
         * 中序遍歷
         * 
    @param node
         
    */

        
    private void inorder(Node node){
            
    if(node!=null){
                inorder(node.getLeft());
                
                
    if(node.getData().equals("EqualMark")==false){
                    System.out.println(node.getData());
                }

                inorder(node.getRight());
            }

        }

    }


    代碼下載:
    http://m.tkk7.com/Files/junglesong/RemoveAll20080308023355.rar

    posted on 2008-03-08 02:25 和風(fēng)細雨 閱讀(723) 評論(0)  編輯  收藏 所屬分類: 算法

    主站蜘蛛池模板: 日本特黄特黄刺激大片免费| 18以下岁毛片在免费播放| fc2成年免费共享视频18| 国产成人免费ā片在线观看老同学 | 欧洲一级毛片免费| 成年在线观看网站免费| 国产男女猛烈无遮挡免费视频| 亚洲国产精品嫩草影院久久 | 中文字幕第一页亚洲| 亚洲激情校园春色| 亚洲av无码日韩av无码网站冲 | 一个人晚上在线观看的免费视频| 女同免费毛片在线播放| 曰批视频免费30分钟成人| 国产男女猛烈无遮挡免费视频 | 大妹子影视剧在线观看全集免费| 99久久久国产精品免费牛牛| 成年女人18级毛片毛片免费| 亚洲日韩在线观看免费视频| 亚洲视频一区在线| 精品国产亚洲第一区二区三区| 美女网站在线观看视频免费的| AV无码免费永久在线观看| 亚洲?V乱码久久精品蜜桃| 久久久国产精品亚洲一区| 亚洲AV无码专区在线观看成人| 国产又黄又爽胸又大免费视频| 一个人看www在线高清免费看| 亚洲精品国产精品乱码不卞| 亚洲精品在线免费看| 特黄aa级毛片免费视频播放| 8x成人永久免费视频| 亚洲av麻豆aⅴ无码电影| 亚洲成年人免费网站| 草久免费在线观看网站| 国产成人免费高清激情明星| 亚洲国产av一区二区三区| 亚洲成aⅴ人在线观看| 久久er国产精品免费观看8| 最近最新中文字幕完整版免费高清| 亚洲欧洲∨国产一区二区三区|