• Java元组的理解和使用


    元组可以看成是一个容器,里面包含了很多的对象,这些对象可以是不同类型的。

    有时候,我们需要一个函数返回很多个值的时候,可以用元组的办法来实现。可以定义一个类,将需要返回的对象设为该类的属性,然后把这个类的实例化对象返回。这种方法的一个缺点是,由于返回的对象的类型是不固定的,你不知道返回的是什么样的类型,如果对每一个方法都重新定义一个类的话,会导致代码臃肿。所幸的是,使用泛型可以解决这样的问题。

    另一个问题在于,不同函数的返回值的个数不一样。这个时候,可以通过继承的机制扩展元组的容器的长度。

    代码示例

    /*
    * 只有两个对象的元组
    */
    class TwoTuple<K,V>{
        public final K fst;
        public final V snd;
        TwoTuple(K k, V v){
            fst = k;
            snd = v;
        }
    }
    /*
     * 三个元素的元组
     */
    class ThreeTuple<K,V,T> extends TwoTuple<K,V>{
        public final T third;
        public ThreeTuple(K k,V v,T t) {
            super(k,v);
            third = t;
        }
    }

    Java语言中本身不支持元组,因此我们需要自己定义类来实现元组,这样子其实挺麻烦的。下面介绍一个第三方的Java元组库类库,名称叫做Javatuples,有自己的官方主页, github star数也有几百,在Java元组库领域差不多起着垄断的地位了。

    Javatuplets中定义的元组最大长度为10,元组类的定义如下

    Unit<A> (1 element)
    
    Pair<A,B> (2 elements)
    
    Triplet<A,B,C> (3 elements)
    
    Quartet<A,B,C,D> (4 elements)
    
    Quintet<A,B,C,D,E> (5 elements)
    
    Sextet<A,B,C,D,E,F> (6 elements)
    
    Septet<A,B,C,D,E,F,G> (7 elements)
    
    Octet<A,B,C,D,E,F,G,H> (8 elements)
    
    Ennead<A,B,C,D,E,F,G,H,I> (9 elements)
    
    Decade<A,B,C,D,E,F,G,H,I,J> (10 elements)

    使用示例

    Triplet<String,Integer,Boolean> triplet = new Triplet<>("hello",33,true);

    需要注意的是:

    (1)尖括号里面的数据的类型不能是基本数据类型,如果需要使用到基本数据类型的话,需要用对应的包装类,如int转换为Integer, boolean转化为Boolean

    (2)长度为2的元组Pair和javafx.util.*提供的Pair是不一样的。在元组里,各个对象是没有关系的,但是在javafx.util.*提供的Pair里,两个对象是绑定的,第一个对象是Key,第二个是Value,可以把后者看作是Map的一个元素

  • 相关阅读:
    【xsy2479】counting 生成函数+多项式快速幂
    【 2019北京集训测试赛(十)】 子矩阵 二分
    【2019北京集训测试赛(七)】 操作 分治+FFT+生成函数
    Python 导出项目依赖/导出所有安装模块/打包数据
    数据结构与算法 介绍以及常见的算法排序
    爬虫 scrapy框架
    爬虫 开发者工具详解
    爬虫 selenium+Xpath 爬取动态js页面元素内容
    爬虫 解析库re,Beautifulsoup,
    爬虫 requests模块的其他用法 抽屉网线程池回调爬取+保存实例,gihub登陆实例
  • 原文地址:https://www.cnblogs.com/Chsy/p/11748040.html
Copyright © 2020-2023  润新知