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

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

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

    和風細雨

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

    求集合差的幾種算法

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

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

    最容易想到的解法-雙重循環

    package com.junglesong;

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

    /**
     * 利用雙重循環實現的篩選
     * 
    @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;
                }
                
            }

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

        }

        
        
    /**
         * 查找數組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);
                }

            }

            
            
    // 取得結果
            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"};
            
            
    // 直接轉的話,生成的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);
            
            
    // 取得結果
            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"};
            
            
    // 以數組2為基礎創建二叉樹
            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);
            }

        }

    }

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

    /**
     * 二叉樹節點類
     * 
    @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{
        
    /**
         * 根節點
         
    */

        
    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;
                        }

                    }

                }

            }

        }

        
        
    /**
         * 尋找一個值對應的節點
         * 
    @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://www.tkk7.com/Files/junglesong/RemoveAll20080308023355.rar

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

    主站蜘蛛池模板: 中文字幕精品亚洲无线码二区| 性色av极品无码专区亚洲| 国产男女猛烈无遮档免费视频网站| 成人网站免费大全日韩国产| 亚洲伊人久久大香线蕉AV| 亚洲五月激情综合图片区| 亚洲日韩人妻第一页| 超pen个人视频国产免费观看| 日韩精品无码专区免费播放| 国产成人精品免费大全| 亚洲成av人无码亚洲成av人| 亚洲中文字幕无码av在线| 婷婷精品国产亚洲AV麻豆不片| 亚洲综合色区在线观看| 免费人成激情视频| 亚洲精品动漫免费二区| 亚洲黄色免费电影| 99久久精品免费精品国产| 99久久免费国产特黄| 深夜福利在线视频免费| 国产亚洲Av综合人人澡精品| 亚洲熟女综合色一区二区三区| 亚洲中字慕日产2020| 亚洲av一本岛在线播放| 亚洲综合久久1区2区3区| 亚洲免费视频在线观看| 亚洲AV永久无码精品| 亚洲AV永久无码区成人网站| 亚洲乱码精品久久久久..| 最新精品亚洲成a人在线观看| 亚洲Aⅴ无码一区二区二三区软件| 啊灬啊灬别停啊灬用力啊免费看| 成人人观看的免费毛片| 扒开双腿猛进入爽爽免费视频| 91免费国产在线观看| 日韩不卡免费视频| 欧美大尺寸SUV免费| 永久黄网站色视频免费直播| 午夜老司机免费视频| 日本黄页网站免费| 免费h黄肉动漫在线观看|