google guava-19.0 和 Java中 commons-collections4-4.4 使用

 1.  google guava

HashMap: 键盘不可以重复,值可以重复
  Multimap: 键可以重复
  HashBiMap: 键与值不能重复,插入以后抛出异常
  双键的Map-》Table 

package com.denganzhi.pp;

import java.util.Collection;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import org.junit.Test;

import java.util.Set;

import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.Multimap;
import com.google.common.collect.Table;
import com.google.common.collect.Table.Cell;
import com.google.common.math.BigIntegerMath;

public class GuavaTest {
	
	@Test
public void test1(){
		// HashMap: 键盘不可以重复,值可以重复
	   Map<String,String> map=new HashMap<>();
	   map.put("a", "小黑");
	   map.put("b", "小黑");
	   map.put("c", "小黑");
	      for(String key:map.keySet()){
              String value =map.get(key); 
              System.out.println(key+"-->"+value);
       }
	    // Multimap: 键可以重复
	  Multimap<String, String> multimap=ArrayListMultimap.create();
	  // 迭代器
	  Iterator<Map.Entry<String, String>> it=  map.entrySet().iterator();
	  while(it.hasNext()){
		 Map.Entry<String, String> entry= it.next();
		 String key= entry.getKey();
		 String value= entry.getValue();
		 // 对调
		 multimap.put(value, key);
	  }
	  multimap.put("小泽", "d");
	  // 查看内容
	 Set<String>  keySet= multimap.keySet();
	 System.out.println(keySet.size());
	  
	 for (String key : keySet) {
		Collection<String> col= multimap.get(key);
		System.out.println("key---"+key+"---col:"+col);
	  }
	 
	}
	
	// 键与值不能重复,插入以后抛出异常
	@Test
public void test2(){
	BiMap<String, String> bitmap= HashBiMap.create();
	try{
		bitmap.put("a", "xiaoming");
		bitmap.put("b", "xiaoming");
		bitmap.put("a", "xiaoming");
		bitmap.put("b", "xiaoming");
	}catch(Exception e){
	e.printStackTrace();
	}	
//		  for(String key:bitmap.keySet()){
//              String value =bitmap.get(key); 
//              System.out.println(key+"-->"+value);
//       }
		
	}
	
	// 双键的Map-》Table-> 
	@Test
	public void test3(){
	Table<String, String, Integer> tables= HashBasedTable.create();
	tables.put("xiaoming", "语文", 100);
	tables.put("xiaohei", "数学", 30);
	tables.put("xiaoze", "英语", 60);
	// 所有行数据
	Set<Cell<String,String,Integer>> cells= tables.cellSet();
	for (Cell<String, String, Integer> temp : cells) {
//		System.out.println(temp.getRowKey()+"--"+temp.getColumnKey()+"--"+temp.getValue());
	}

  	 // 根据名字 找 课程和成绩 
	Set<String> stus = tables.rowKeySet();
	// 所有成绩
	for (String stu : stus) {
	System.out.println(stu);
	Map<String,Integer> map= tables.row(stu);
//	System.out.println(map);
	 for (String key : map.keySet()) {
		 System.out.println(key);
			Integer col= map.get(key);
		System.out.println(col);
		  }
	}
	
	// 所有课程, 根据课程找  名字和成绩
	Set<String> coursSet= tables.columnKeySet();
	for (String string : coursSet) {
		Map<String,Integer> sources= tables.column(string);
		System.out.println(sources);
	}
	
	
	}

}

 2. CommonsIO 

求集合  并集 |  交集 | 差集

@Test
	public void main4_io(){
	Set<String> set1=new HashSet<>();
	set1.add("a");
	set1.add("b");
	Set<String> set2=new HashSet<>();
	set2.add("b");
	set2.add("c");
	// 并集
	Collection<String> col= CollectionUtils.union(set1, set2);
	System.out.println("---并集----"+ col);  //---并集----[a, b, c]
	// 交集
	col= CollectionUtils.intersection(set1, set2);
//	CollectionUtils.retainAll(set1, set2);  //---交集---[b]
	System.out.println("---交集---"+col);
	// 差集
	col= CollectionUtils.subtract(set1, set2);  //---差集---[a]
	System.out.println("---差集---"+col);
	}

循环队列、只读 队列

	/**
	 * 循环队列
	 */
	@Test
	public void main5(){
	   CircularFifoQueue<String> que=new CircularFifoQueue<>(2);
	   que.add("a");
	   que.add("b");
	   que.add("c");  //长度为2,c进来a  出去了
	   for (int i = 0; i < que.size(); i++) {
		System.out.println(que.get(i));
	   }
	   // 设置只读 队列
	  Queue<String> readOnlyQueue=UnmodifiableQueue.unmodifiableQueue(que);
	  // 抛异常
	  readOnlyQueue.add("d"); 
	   
	}

去除List 重复元素  

// 去除重复元素 
	@Test
	public void main6(){
		List<String> list=new ArrayList<>();
		list.add("a");
		list.add("b");
		list.add("a");
		// 去除 重复的过滤器
		Iterator<String> it=new UniqueFilterIterator<>(list.iterator());
		while(it.hasNext()){
			System.out.println(it.next());
		}
}

无序 双向 map , 通过value 找  key 
有序双向Map

	// 无序 双向 map , 通过value 找  key 
	BidiMap<String, String> map=new DualHashBidiMap<>();
	map.put("bj", "[email protected]");
	map.put("sxt", "[email protected]");
	// 反转
	System.out.println(map.inverseBidiMap().get("[email protected]"));
	
	// 有序双向Map
	BidiMap<String, String> map2= new DualTreeBidiMap<>();
	map2.put("bj", "[email protected]");
	map2.put("sxt", "[email protected]");
	// 遍历 查看
	MapIterator<String, String> it2=map.inverseBidiMap().mapIterator();
    while(it2.hasNext()){
    	String key = it2.next();
    	String value= it2.getValue();
    	System.out.println(key+"---"+value);
    }

 Bag 包允许内容 重复
        // 1. HashBag 内容无序
        // 2. TreeBag 内容有序,统计字符个数【这里的有序是内容会排序按照compare接口,不是下标有序】

	@Test
	public void main7(){
		// Bag 包允许重复
	    // 1. HashBag 无序
//	    Bag<String> bag=new HashBag<>();
//	    bag.add("c");
//	    bag.add("a");
//	    bag.add("a",5); // a 在加 5 次
//	    bag.remove("a",2);  // a 删除2次 
//	    bag.add("1");
//	    bag.add("b");
//	    Iterator<String> it1=bag.iterator();
//	    while(it1.hasNext()){
//	    	System.out.println(it1.next());
//	       }
		
	    // 2. TreeBag 有序
		// 有序是指  排列顺序 按照ascII 码
	    Bag<String> bag2=new TreeBag<>();
	    bag2.add("b");
	    bag2.add("c");
	    bag2.add("a");
	    bag2.add("a",5); // a 在加 5 次
	    bag2.remove("a",2);  // a 删除2次 
	    Iterator<String> it2=bag2.iterator();
	    while(it2.hasNext()){
	    	System.out.println(it2.next());
	       }

  // 字符串 个数统计 
	    String str="a b c a b c d d d";
	    String[] strArray= str.split(" ");
	    Bag<String> bagArray= new TreeBag<>();
	    for (String string : strArray) {
			bagArray.add(string);
		}
	    Set<String> keys= bagArray.uniqueSet(); // 去除重复内容,并且统计个数
	    for (String letters : keys) {
			System.out.println(letters+"--->"+ bagArray.getCount(letters));
		}
}

猜你喜欢

转载自blog.csdn.net/dreams_deng/article/details/105755232