zoukankan      html  css  js  c++  java
  • 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的一个元素

  • 相关阅读:
    网络相关知识点:nginx相关概念
    Nginx初体验(一):nginx介绍
    Mybatis常见面试题(转)
    Mybatis 的常见面试题
    springmvc和mybatis面试题(含答案)
    SpringMVC总结以及在面试中的一些问题.
    Spring69道面试题
    Spring面试题
    java基础面试题
    2018年Java面试题整理
  • 原文地址:https://www.cnblogs.com/Chsy/p/11748040.html
Copyright © 2011-2022 走看看