Java数组-泛型-Generator生成器

该文章代码来源《Thinking In Java》。

这里主要学习的是java数组排序和生成器Generator的实现和运用。

首先介绍生成器类:Generator.java

package array;

public interface Generator<T> {
	T next();
}

 再来介绍CollectionData.java类,该类主要用于创建一个Collection对象,该对象中所填充的元素是由生成器gen所产生的,而元素的数量则由其他参数设定。所有的Collection子类型都有toArray()方法,该方法将使用Collection中的元素填充参数数组。

CollectionData.java类:

package array;

import java.util.ArrayList;

public class CollectionData<T> extends ArrayList<T> {
	public CollectionData(Generator<T> gen,int quantity){
		for(int i=0;i<quantity;i++){
			this.add(gen.next());
		}
	}
	// A generic convenience method.
	public static <T> CollectionData<T> list(Generator<T> gen,int quantity){
		return new CollectionData<T>(gen, quantity);
	}
}

 为了从Generator中创建数组,我们需要两个转换工具,第一个工具使用任意的Generator来产生Object子类型的数组。为了处理基本类型,第二个工具接收任意基本类型的包装器类型数组,并产生相应的基本类型数组。

     第一个工具有两种选项,并由重载的静态方法array()来表示。该方法的第一个版本接收一个已有的数组,并使用某个Generator来填充它,而第二个版本接收一个Class对象、一个已有的数组和所需的元素数量,然后创建一个新数组,并使用所接收的Generator来填充它。注意,这个工具只能产生Object子类型的数组,而不能产生基本类型数组。

最后来介绍:CompType.java

要实现排序,运用刚才介绍的Generated类利用生成器填充该类型的数组。

package array;

import java.util.Arrays;
import java.util.Random;

public class CompType implements Comparable<CompType> {

	int i;
	int j;
	private static int count=1;
	public CompType(int n1,int n2){
		i=n1;
		j=n2;
	}
	public String toString(){
		String result="[i=" + i + ",j=" + j+ "]";
		if(count++ %3==0){
			result+="\n";
		}
		return result;
	}
	@Override
	public int compareTo(CompType o) {
		// TODO Auto-generated method stub
		return (i<o.i ? -1:(i==o.i ?0:1));
	}
	private static Random r =new Random(47);
	public static Generator<CompType> generator(){
		return new Generator<CompType>(){
			public CompType next(){
				return new CompType(r.nextInt(100),r.nextInt(100));
			}
		};
	}
	@SuppressWarnings("null")
	public static void main(String args[]){
		CompType[] a=Generated.array(new CompType[12], generator());
		System.out.println("before sorting:");
		System.out.println(Arrays.toString(a));
		Arrays.sort(a);
		System.out.println("after sorting");
		System.out.println(Arrays.toString(a));
	}
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值