Java-类库-Guava-Table

简介: Table  当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的MapTest public void TableTest(){ Table aTable = HashBasedTable.

Table

  当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map

Test
    public void TableTest(){
        Table<String, Integer, String> aTable = HashBasedTable.create();  

        for (char a = 'A'; a <= 'C'; ++a) {  
            for (Integer b = 1; b <= 3; ++b) {   
                aTable.put(Character.toString(a), b, String.format("%c%d", a, b));  
            }  
        }  

        System.out.println(aTable.column(2));  
        System.out.println(aTable.row("B"));   
        System.out.println(aTable.get("B", 2));  

        System.out.println(aTable.contains("D", 1));   
        System.out.println(aTable.containsColumn(3));   
        System.out.println(aTable.containsRow("C"));  
        System.out.println(aTable.columnMap()); 
        System.out.println(aTable.rowMap());   

        System.out.println(aTable.remove("B", 3)); 
    }
{A=A2, B=B2, C=C2}
{1=B1, 2=B2, 3=B3}
B2
false
true
true
{1={A=A1, B=B1, C=C1}, 2={A=A2, B=B2, C=C2}, 3={A=A3, B=B3, C=C3}}
{A={1=A1, 2=A2, 3=A3}, B={1=B1, 2=B2, 3=B3}, C={1=C1, 2=C2, 3=C3}}
B3

  Table视图:
  rowMap()返回一个Map

import com.google.common.collect.ClassToInstanceMap;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.MutableClassToInstanceMap;

public class OtherTest {

    @Test
    public  void ClassToInstanceMapTest() {
        ClassToInstanceMap<String> classToInstanceMapString =MutableClassToInstanceMap.create();
        ClassToInstanceMap<Person> classToInstanceMap =MutableClassToInstanceMap.create();
        Person person= new Person("peida",20);
        System.out.println("person name :"+person.name+" age:"+person.age);
        classToInstanceMapString.put(String.class, "peida");
        System.out.println("string:"+classToInstanceMapString.getInstance(String.class));

        classToInstanceMap.putInstance(Person.class,person);
        Person person1=classToInstanceMap.getInstance(Person.class);
        System.out.println("person1 name :"+person1.name+" age:"+person1.age);
    }
}

class Person {
    public String name;
    public int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
} 

  RangeSet

  RangeSet用来处理一系列不连续,非空的range。当添加一个range到一个RangeSet之后,任何有连续的range将被自动合并,而空的range将被自动去除。例如:

   @Test
    public void RangeSetTest(){
        RangeSet<Integer> rangeSet = TreeRangeSet.create();
        rangeSet.add(Range.closed(1, 10));
        System.out.println("rangeSet:"+rangeSet);
        rangeSet.add(Range.closedOpen(11, 15)); 
        System.out.println("rangeSet:"+rangeSet);
        rangeSet.add(Range.open(15, 20));
        System.out.println("rangeSet:"+rangeSet);
        rangeSet.add(Range.openClosed(0, 0)); 
        System.out.println("rangeSet:"+rangeSet);
        rangeSet.remove(Range.open(5, 10)); 
        System.out.println("rangeSet:"+rangeSet);
    }

 注意,像合并Range.closed(1, 10)和Range.closedOpen(11, 15)这样的情况,我们必须先用调用Range.canonical(DiscreteDomain)传入DiscreteDomain.integers()处理一下。

  RangeSet的视图
  RangeSet的实现支持了十分丰富的视图,包括:
  complement():是个辅助的RangeSet,它本身就是一个RangeSet,因为它包含了非连续,非空的range。
  subRangeSet(Range): 返回的是一个交集的视图。
  asRanges():返回可以被迭代的Set

  @Test
    public void RangeMapTest(){
        RangeMap<Integer, String> rangeMap = TreeRangeMap.create();
         rangeMap.put(Range.closed(1, 10), "foo"); 
         System.out.println("rangeMap:"+rangeMap);
         rangeMap.put(Range.open(3, 6), "bar"); 
         System.out.println("rangeMap:"+rangeMap);
         rangeMap.put(Range.open(10, 20), "foo"); 
         System.out.println("rangeMap:"+rangeMap);
         rangeMap.remove(Range.closed(5, 11)); 
         System.out.println("rangeMap:"+rangeMap);
    }

    输出:
    rangeMap:[[110]=foo]
    rangeMap:[[13]=foo, (36)=bar, [610]=foo]
    rangeMap:[[13]=foo, (36)=bar, [610]=foo, (1020)=foo]
    rangeMap:[[13]=foo, (35)=bar, (1120)=foo]

 RangeMap的视图
  RangeMap提供了两种视图:
  asMapOfRanges():返回Map

目录
相关文章
|
5月前
|
开发框架 Java Apache
Java中的类库与工具集推荐
Java中的类库与工具集推荐
|
7月前
|
算法 Java
Java中CAS算法的集中体现:Atomic原子类库,你了解吗?
【5月更文挑战第15天】Java中CAS算法的集中体现:Atomic原子类库,你了解吗?
55 1
|
6月前
|
安全 Java 程序员
[笔记] 疯狂JAVA讲义(第3版)第7章 Java基础类库
[笔记] 疯狂JAVA讲义(第3版)第7章 Java基础类库
|
7月前
|
SQL 存储 Java
令应用开发效率飙升的 Java 类库
更多地使用 Java 而避免存储过程和复杂 SQL 是当前应用开发的一个潮流,这会在架构上带来优势,但用 Java 实现 SQL 式的运算并不是非常方便,很多任务要从头写起,开发效率其实反而会降低。
|
Java 数据库连接
Java类库的使用
Java类库(Java Class Library)是一组预定义的类和接口,提供了丰富的功能和工具,可以帮助开发人员快速开发Java应用程序。Java类库是Java开发的核心部分,包含了各种常用的类和接口,用于处理字符串、日期、集合、输入输出、网络通信、图形界面等各种任务。 Java类库分为两部分:核心类库(Core Class Library)和扩展类库(Extension Class Library)。 核心类库包括了Java语言的基本类和接口,如Object、String、Math、ArrayList、HashMap等。这些类和接口提供了常用的功能和数据结构,可以直接在代码中使用。
184 0
|
7月前
|
SQL Java Apache
Java类库
Java类库
67 0
|
7月前
|
缓存 安全 Java
JAVA 常用类库 StringBuffer 和 StringBuilder
● 当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。 ● 和 String 类不同的是,StringBuffer 和 StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象。 ● StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。 ● 由于 StringBuilder 相较于 StringBuffer 有速度优势,多数情况下建议使用 StringBuilder类。然而在应用程序要求线程安全的情况下,
|
7月前
|
安全 Java 关系型数据库
Java核心类库
Java核心类库
142 1
|
存储 算法 安全
Java常用类库与技巧
Java常用类库与技巧
67 0