1. 程式人生 > >141_容器_commons之迭代器(Map、過濾、迴圈)_雙向Map_Bag包

141_容器_commons之迭代器(Map、過濾、迴圈)_雙向Map_Bag包

這裡寫圖片描述

迭代器擴充套件

  • Test06_Iterator.java
package commons.collection;

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

import org.apache.commons.collections4.IterableMap;
import org.apache.commons.collections4.MapIterator;
import org.apache.commons.collections4.Predicate;
import
org.apache.commons.collections4.iterators.ArrayListIterator; import org.apache.commons.collections4.iterators.FilterIterator; import org.apache.commons.collections4.iterators.LoopingIterator; import org.apache.commons.collections4.iterators.UniqueFilterIterator; import org.apache.commons.collections4.map.HashedMap; /** * 迭代器的擴充套件 * 1.MapIterator以後不再使用map.keySet.iterator訪問 * IterableMap介面->HashedMap實現類 * 2.UniqueFilterIterator(去重迭代器 ) * 3.FilterIterator 自定義過濾 +Predicate * 4.LoopingIterator 迴圈迭代器 * 5.ArrayListIterator 陣列迭代器 */
public class Test06_Iterator { public static void main(String[] args) { // mapIterator(); // uniqueFilterIterator(); // filterIterator(); // loopingIterator(); // arrayListIterator(); } /** * 1.Map迭代器-MapIterator */ public static void mapIterator
(){ System.out.println("=====map迭代器===="); IterableMap<String,String> map =new HashedMap<String,String>(); map.put("a","bjsxt"); map.put("b", "sxt"); map.put("c", "good"); //使用 MapIterator MapIterator<String,String> it =map.mapIterator(); while(it.hasNext()){ /** 一定要it.next() it.next(); String key =it.getKey(); */ String key =it.next(); String value =it.getValue(); System.out.println(key+"-->"+value); } } /** * 2. 去重迭代器-UniqueFilterIterator */ public static void uniqueFilterIterator(){ System.out.println("=====去重迭代器 ===="); List<String> list =new ArrayList<String>(); list.add("a"); list.add("b"); list.add("a"); //去除重複的過濾器 Iterator<String> it =new UniqueFilterIterator<String>(list.iterator()); while(it.hasNext()){ System.out.println(it.next()); } } /** * 3.自定義迭代器-FilterIterator(自定義過濾) +Predicate */ public static void filterIterator(){ System.out.println("=====自定義迭代器 ===="); List<String> list =new ArrayList<String>(); list.add("refer"); list.add("dad"); list.add("bjsxt"); list.add("moom"); //自定義條件判斷 Predicate<String> pre =new Predicate<String>(){ public boolean evaluate(String value) { //迴文判斷 return new StringBuilder(value).reverse().toString().equals(value); }}; //篩選迴文的過濾器 Iterator<String> it =new FilterIterator<String>(list.iterator(),pre); while(it.hasNext()){ System.out.println(it.next()); } } /** * 4.迴圈迭代器-LoopingIterator */ public static void loopingIterator(){ System.out.println("===== 迴圈迭代器 ===="); List<String> list =new ArrayList<String>(); list.add("refer"); list.add("dad"); list.add("bjsxt"); list.add("moom"); Iterator<String> it =new LoopingIterator<String>(list); for(int i=0;i<15;i++){ System.out.println(it.next()); } } /** * 5.陣列迭代器-ArrayListIterator */ public static void arrayListIterator(){ System.out.println("===== 陣列迭代器 ===="); int[] arr ={1,2,3,4,5}; //陣列迭代器-泛型只能使用引用型別(Integer) //Iterator<Integer> it =new ArrayListIterator<Integer>(arr); Iterator<Integer> it =new ArrayListIterator<Integer>(arr,1,3);//指定起始索引和結束索引 while(it.hasNext()){ System.out.println(it.next()); } } }

雙向Map-BidiMap

  • Test07_BidiMap.java
package commons.collection;

import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.MapIterator;
import org.apache.commons.collections4.bidimap.DualHashBidiMap;
import org.apache.commons.collections4.bidimap.DualTreeBidiMap;

/**BidiMap
 * 雙向Map->要求鍵與值都不能重複
 * 可以通過鍵找值,也可以通過值找鍵->inverseBidiMap()反轉 
 * 1.DualTreeBidiMap :有序
 * 2.DualHashBidiMap :無序
 */

public class Test07_BidiMap {
    /**
     * @param args
     */
    public static void main(String[] args) {
        //dualHashBidiMap();
        dualTreeBidiMap();
    }
    /**
     * 1.無序的雙向Map
     */
    public static void dualHashBidiMap(){
        System.out.println("=====無序的雙向Map====");
        BidiMap<String,String> map =new DualHashBidiMap<String,String>();
        map.put("bj", "[email protected]");
        map.put("sxt", "[email protected]");
        //反轉
        System.out.println(map.inverseBidiMap().get("[email protected]"));
        //遍歷檢視
        MapIterator<String,String> it =map.inverseBidiMap().mapIterator();
        while(it.hasNext()){
            String key =it.next();
            String value =it.getValue();
            System.out.println(key+"-->"+value);
        }
    }
    /**
     * 2.有序的雙向Map
     */
    public static void dualTreeBidiMap(){
        System.out.println("=====有序的雙向Map====");
        BidiMap<String,String> map =new DualTreeBidiMap<String,String>();
        map.put("bj", "[email protected]");
        map.put("sxt", "[email protected]");   
        //遍歷檢視
        MapIterator<String,String> it =map.inverseBidiMap().mapIterator();
        while(it.hasNext()){
            String key =it.next();
            String value =it.getValue();
            System.out.println(key+"-->"+value);
        }
    }
}

Bag包

  • Test08_Bag.java
package commons.collection;

import java.util.Iterator;
import java.util.Set;

import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;
import org.apache.commons.collections4.bag.TreeBag;

/**
 * Bag包->允許重複
 * 1.HashBag 無序
 * 2.TreeBag 有序
 * 3.統計單詞的出現次數
 */

public class Test08_Bag {
    public static void main(String[] args) {
        //hashBag();
        //treeBag();
        //wordsCount();
    }
    /**
     * 1.無序-HashBag
     */
    public static void hashBag(){
        System.out.println("=====無序的包====");
        Bag<String> bag =new HashBag<String>();
        bag.add("a");
        bag.add("a",5);
        bag.remove("a", 2);
        bag.add("b");
        bag.add("c");
        Iterator<String> it =bag.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
    /**
     * 2.有序-TreeBag
     */
    public static void treeBag(){
        System.out.println("=====有序的包====");
        Bag<String> bag =new TreeBag<String>();
        bag.add("a");
        bag.add("a",5);
        bag.remove("a", 2);
        bag.add("b");
        bag.add("c");
        Iterator<String> it =bag.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
    /**
     * 3.統計單詞的出現次數
     */
    public static void wordsCount(){
        String str ="this is a cat and that is a mice where is the food";
        //分割字串
        String[] strArray =str.split(" ");
        Bag<String> bag =new TreeBag<String>();
        for(String temp:strArray){
            bag.add(temp);
        }

        System.out.println("====統計次數===");
        Set<String> keys =bag.uniqueSet();
        for(String letter:keys){
            System.out.println(letter+"-->"+bag.getCount(letter));
        }
    }
}