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

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

    主站蜘蛛池模板: 国产成人A在线观看视频免费 | 亚洲精华国产精华精华液| 久久久久久成人毛片免费看| 国产极品粉嫩泬免费观看| 亚洲综合久久1区2区3区| 一级看片免费视频| 精品久久久久久久免费人妻| 亚洲日本在线看片| 成人免费av一区二区三区| 日韩免费视频在线观看| 亚洲国产精品久久网午夜 | 免费A级毛片在线播放| 亚洲精品国产福利一二区| 亚洲色偷偷综合亚洲av78| 3d成人免费动漫在线观看| 狠狠色伊人亚洲综合成人| 特级做a爰片毛片免费看| 免费毛片网站在线观看| 亚洲国产成人精品无码一区二区| 日韩精品无码免费专区午夜不卡| 亚洲不卡无码av中文字幕| 亚洲熟妇AV一区二区三区浪潮| 免费视频爱爱太爽了| 亚洲av成人无码久久精品| 在线观看免费视频网站色| 亚洲精品黄色视频在线观看免费资源| 亚洲高清乱码午夜电影网| 免费做爰猛烈吃奶摸视频在线观看 | 国产美女无遮挡免费视频 | 国产高清对白在线观看免费91| 四虎影视永久免费视频观看| 亚洲欧洲国产综合AV无码久久| 99久久精品日本一区二区免费| 中文字幕在线观看亚洲| 国产精品免费看久久久| 日韩精品亚洲aⅴ在线影院| 免费国产高清毛不卡片基地| 免费看国产一级片| 日韩亚洲人成在线综合| 麻豆成人精品国产免费| 亚洲熟妇丰满xxxxx|