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));}}
- Apache容器扩展类和常用方法
- Apache容器扩展Transformer类
- guava中扩展容器的一些常用类和方法(一)
- guava中扩展容器的一些常用类和方法(二)
- 容器类常用方法(1)
- 容器类常用方法(2)
- 容器类常用方法(3)
- org.apache.commons扩展容器中的Predicate类
- javascript给String类和Array扩展常用方法
- sublineText 3 扩展方法和常用插件
- java常用类和容器
- Java容器类常用方法总结
- 容器类常用方法(5)
- 容器类(collection)常用方法总结
- 常用容器的方法
- vector容器常用方法
- Linq常用扩展方法
- 常用扩展方法总结
- 网上看到的X度移动端笔试题
- Android ListView多布局复用ArrayIndexOutOfBoundsException问题
- sql性能优化 - 数据库对象优化
- python第一课~兔子在欢乐的度假期~
- sql server查看当前进程、死锁进程, 并杀掉死进程
- Apache容器扩展类和常用方法
- 安卓控件使用系列31:ViewStub惰性装载控件的使用方法
- HDU 5494 Card Game(排个序就可以了)——BestCoder Round #58(div.2)
- LeetCodeOJ_202_Happy Number
- HDU2054 A==B?
- HDU 5491 The Next 2015 ACM/ICPC Asia Regional Hefei Online1008
- eclipse主题颜色配置
- C++ static、const和static const 以及它们的初始化
- iOS大典之UIScrollView