<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://m.tkk7.com/Files/junglesong/RemoveAll20080308023355.rar

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

    主站蜘蛛池模板: 国产成人啪精品视频免费网| 日本免费久久久久久久网站| 啦啦啦中文在线观看电视剧免费版| 亚洲v高清理论电影| 久久精品免费观看| 99久久亚洲精品无码毛片| 成人久久免费网站| 亚洲一区精品中文字幕| 最近中文字幕免费mv在线视频| 中文字幕亚洲综合久久2| 3344永久在线观看视频免费首页| 亚洲网站视频在线观看| 1000部拍拍拍18勿入免费视频下载 | 亚洲无人区一区二区三区| 国产精品一区二区三区免费| 亚洲宅男天堂在线观看无病毒| 成人无码精品1区2区3区免费看| 亚洲成AV人片在线观看ww| 一级毛片免费观看不卡视频| 亚洲免费中文字幕| 国产男女猛烈无遮挡免费视频 | 国产精品日本亚洲777| 免费人成网站在线播放| 好吊色永久免费视频大全| 亚洲国产一区国产亚洲| 日本妇人成熟免费中文字幕| 色天使亚洲综合一区二区| 亚洲熟女一区二区三区| 久久www免费人成看片| 久久亚洲欧美国产精品| 亚洲国产一成人久久精品| 曰批视频免费30分钟成人| 色网站在线免费观看| 亚洲AV天天做在线观看| 毛片免费vip会员在线看| 九一在线完整视频免费观看 | 亚洲国产精品综合久久网各| 色播在线永久免费视频| 国产一级黄片儿免费看| jiz zz在亚洲| 亚洲va无码手机在线电影|