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", "bj@test.com");
        map.put("sxt", "sxt@qq.com");
        //反转
        System.out.println(map.inverseBidiMap().get("sxt@qq.com"));
        //遍历查看
        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", "bj@test.com");
        map.put("sxt", "sxt@qq.com");   
        //遍历查看
        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));
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值