Apache容器扩展类和常用方法

来源:互联网 发布:java监听器使用方法 编辑:程序博客网 时间:2024/06/06 01:25

1. 新单词:

  • symmetric 对称的 
  • exclusive 独有的 
  • disjunction 分离 
  • cardinality 基数
  • equivalent 相等的

2. 闭包Closure 

  业务操作:重写execute()方法

  工具类:CollectionUtils.forAllDo()关联操作

  1) IfClosure.ifClosure(断言, 业务, 业务) 二选一操作

  2) ChainedClosure.chainedClosure(业务, 业务) 链式操作

  3) WhileClosure.whileClosure(断言, 业务, boolean(false是先进行判断再进行操作,true是先进行操作再进行判断)) 循环操作

3. 交集、差集、并集

1)交集:CollectionUtils.intersection()
 
          CollectionUtils.retainAll() 
2)差集:CollectionUtils.subtract()
3)并集:CollectionUtils.union() 
4)不同元素: CollectionUtils.disjunction()

public static void main(String[] args) {Set<Integer> set1 = new HashSet<Integer>();set1.add(1);set1.add(2);set1.add(3);Set<Integer> set2 = new HashSet<Integer>();set2.add(2);set2.add(3);set2.add(4);// 求交集// Collection<Integer> inter = CollectionUtils.intersection(set1, set2);Collection<Integer> inter = CollectionUtils.retainAll(set1, set2);System.out.println("交集:" + inter);// 求差集Collection<Integer> diff = CollectionUtils.subtract(set1, set2);System.out.println("差集:" + diff);// 求并集Collection<Integer> union = CollectionUtils.union(set1, set2);System.out.println("交集:" + union);// 求出不同的元素Collection<Integer> dist = CollectionUtils.disjunction(set1, set2);System.out.println("不同元素:" + dist);}}/*Output:交集:[2, 3]差集:[1]交集:[1, 2, 3, 4]不同元素:[1, 4]*/

4. 队列的扩展:

1)循环队列:CircularFifoQueue 

2)只读队列: UnmodifiableQueue.unmodifiableQueue()

3)断言队列:PredicatedQueue.predicatedQueue()

public static void main(String[] args) {// circularQueue();// readOnlyQueue();// predicateQueue();}// 循环队列public static void circularQueue() {CircularFifoQueue<String> circular = new CircularFifoQueue<String>(2);// 长度为2circular.add("a");circular.add("b");circular.add("c");System.out.println(circular);// Output: [b, c]}// 只读队列public static void readOnlyQueue() {CircularFifoQueue<String> circular = new CircularFifoQueue<String>();// 默认长度为32circular.add("a");circular.add("b");circular.add("c");// 变为只读队列Queue<String> que = UnmodifiableQueue.unmodifiableQueue(circular);// que.add("d"); 报错}// 断言队列public static void predicateQueue() {CircularFifoQueue<String> circular = new CircularFifoQueue<String>();// 默认长度为32Predicate<String> notNull = NotNullPredicate.notNullPredicate();// 设置为断言队列Queue<String> que = PredicatedQueue.predicatedQueue(circular, notNull);que.add("a");que.add("b");// que.add(null) 报错}

5. 迭代器的扩展:

1)JDK中Map的两种遍历方法keySet()和entrySet()

2)Apache中的迭代器MapIterator和mapiterator()方法

  但是这个迭代器要Apache中使用

  IterableMap的HashedMap(简单来说IterableMap相当于Map;HashedMap相当于HashMap)

3)去重迭代器,相当于过滤器:UniqueFilterIterator

4)自定义迭代器:FilterIterator + Predicate 断言

5)循环迭代器:LoopingIterator(注意一下参数和访问)

public static void main(String[] args) {// testMap();// mapIt();// uniqueIt();// selfIt();loopingIt();}// JDK中Map的两种遍历方式public static void testMap() {Map<String, String> map = new HashMap<String, String>();map.put("a", "first");map.put("b", "second");map.put("c", "third");// 第一种 keySet()Set<String> keys = map.keySet();Iterator<String> iter = keys.iterator();while (iter.hasNext()) {String key = iter.next();String value = map.get(key);System.out.println(key + "-->" + value);}System.out.println("===================");// 第二种 entrySet()Set<Entry<String, String>> entry = map.entrySet();Iterator<Entry<String, String>> iter2 = entry.iterator();while (iter2.hasNext()) {Entry<String, String> tempMap = iter2.next();String key = tempMap.getKey();String value = tempMap.getValue();System.out.println(key + "-->" + value);}}// Apache中的迭代器public static void mapIt() {IterableMap<String, String> map = new HashedMap<String, String>();map.put("a", "first");map.put("b", "second");map.put("c", "third");// 迭代器MapIterator<String, String> iter = map.mapIterator();while (iter.hasNext()) {String key = iter.next();String value = map.get(key);System.out.println(key + "-->" + value);}}// 去重迭代器public static void uniqueIt() {List<String> list = new ArrayList<String>();list.add("a");list.add("b");list.add("a");// 去重迭代器Iterator<String> iter = new UniqueFilterIterator(list.iterator());while (iter.hasNext()) {System.out.println(iter.next());}}// Output:a b// 自定义迭代器public static void selfIt() {List<String> list = new ArrayList<String>();list.add("refer");list.add("fsdd");list.add("mom");// 断言 :寻找回文Predicate<String> pre = new Predicate<String>() {@Overridepublic boolean evaluate(String input) {return new StringBuilder(input).reverse().toString().equals(input);}};// 关联Iterator<String> iter = new FilterIterator(list.iterator(), pre);while (iter.hasNext()) {System.out.println(iter.next());}}// 循环迭代器public static void loopingIt() {List<String> list = new ArrayList<String>();list.add("refer");list.add("fsdd");list.add("mom");Iterator<String> iter = new LoopingIterator(list);// 不再是list.iterator()for (int i = 0; i < 5; i++) {// 不再是iter.hasNext()System.out.println(iter.next());}}// Output:refer fdss mom refer fdss

6. 双向(key和value都是唯一的)Map--> BidiMap
 1) inverseBidiMap()反转
 2)实现类:DualHashMap 无序

             DualTreeMap 有序

public static void main(String[] args) {BidiMap<String, String> map = new DualTreeBidiMap<String, String>();map.put("新浪", "www.sina.com");map.put("百度", "www.baidu.com");map.put("途牛", "www.tuniu.com");// 通过value找key值String str = map.inverseBidiMap().get("www.baidu.com");System.out.println(str);// 遍历MapIterator<String, String> iter = map.mapIterator();while(iter.hasNext()) {String key = iter.next();  //String key = iter.getKey();可以这样,但必须有iter.next()String value = iter.getValue();System.out.println(key+"-->"+value);}}/*Output:百度新浪-->www.sina.com百度-->www.baidu.com途牛-->www.tuniu.com这里貌似不是有顺序的输出?解释:Unicode(新)<Unicode(百)<Unicode(途),因此是有顺序的*/

7.  包——Bag 允许重复(可以用来统计单词的个数)
   实现类:
  HashBag   无序
  TreeBag       有序

public static void main(String[] args) {  //testBag();wordsCount();}// Bag的基本用法public static void testBag() {Bag<String> bag = new TreeBag<String>();bag.add("a");bag.add("b", 4);// 加入4个"b"bag.remove("b", 3);// 删除3个"b"Iterator<String> iter = bag.iterator();while(iter.hasNext()) {System.out.println(iter.next());}// Output:a b}// 统计单词个数public static void wordsCount() {Bag<String> bag = new TreeBag<String>();String str = "today is mine moneny is mine";String[] strArray = str.split(" ");// 分拣存储for(int i = 0; i < strArray.length; i++) {bag.add(strArray[i]);}// 遍历Set<String> keys = bag.uniqueSet();// 这里用Set是因为Set中存储的值不能相同Iterator<String> iter = keys.iterator();while(iter.hasNext()) {String key = iter.next();System.out.println(key+"-->"+bag.getCount(key));}}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 诛仙账号被盗了怎么办 诛仙3账号忘了怎么办 伤害世界车翻了怎么办 诛仙3没用的护符怎么办 灵跃武器选错了怎么办 qq账号不记得了怎么办 突然不来月经了怎么办 闭经2个月了怎么办 闭经怎么办我才19岁 闭经3 4个月怎么办 月经来了十多天了还不走怎么办 3个月没有来月经怎么办 48岁突然没月经怎么办 月经来了疼的厉害怎么办 月经肚子疼怎么办快速止疼 来月经疼的厉害怎么办 22岁闭经6个月怎么办 月经推迟16天了怎么办 月经半年没来了怎么办 月经推迟两个月了还不来怎么办 四个月月经不来怎么办 快两个月没来月经了怎么办 月经停了两个月怎么办 别人诬告我我该怎么办 有人造谣我我该怎么办 宝宝晚上不睡觉哭闹怎么办 婴儿晚上不睡觉哭闹怎么办 2月宝宝排便困难怎么办 3岁宝宝老是哭闹怎么办 2岁了囟门闭合晚怎么办 宝宝卤门闭合慢怎么办 手经常碰水脱皮怎么办 迅雷文件已移除怎么办 手机不读sd卡怎么办 g买卖卖错账号怎么办 森林被野人拖走怎么办 我的世界没有羊怎么办 黑魂3杀死铁匠后怎么办 幻境7下8走错了怎么办 换了手机号微信怎么办 微信游戏没了怎么办