`
AquariusM
  • 浏览: 145947 次
  • 性别: Icon_minigender_1
  • 来自: 南阳
社区版块
存档分类
最新评论

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));
	}
}
 
分享到:
评论

相关推荐

    java基础-泛型通配符

    java基础-泛型通配符

    8-java进阶-泛型1

    泛型是Java编程中的一个重要概念,它提供了一种在编译时期检查类型安全性的机制,同时也减少了强制类型转换的需要。泛型主要应用于类、接口和方法中,用来限制可以存储或处理的数据类型。 1. **泛型的意义**: - ...

    JAVA-泛型课件-泛型课件

    泛型是Java语言的一个重要特性,首次出现在Java SE 1.5版本中。它的引入主要是为了解决在集合操作中类型安全性的问题,并通过引入参数化类型的概念,提高了代码的复用性与可读性。 ### 泛型概念 泛型,即参数化...

    java--泛型编程

    Java 泛型编程是Java语言在JDK 1.5版本引入的一项重要特性,它极大地提高了代码的安全性和可重用性。泛型本质上是参数化类型,允许我们在编写代码时,将数据类型作为参数,这使得类、接口和方法能够处理多种不同的...

    java-泛型-面试题.docx

    java-泛型-面试题.docx

    Java-泛型.ppt

    Java泛型不支持泛型数组。这是由于类型擦除导致的限制,因为所有泛型数组在运行时都将被视为`Object[]`。因此,直接创建泛型数组是不可行的,但可以通过其他方式间接实现。 #### 七、泛型与反射 反射可以用来获取...

    Generic_2(泛型类-泛型方法-泛型接口-泛型限定(上限)

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...

    11.4java-泛型(Generic).md

    11.4java-泛型(Generic)

    大学课程讲义-Java基础-泛型.docx

    Java泛型是Java编程语言中的一种特性,它允许在数据结构(如集合)中存储特定类型的元素,从而提供了编译时的类型安全性和更清晰的代码。泛型引入的主要目标是消除强制类型转换的需要,减少类型转换带来的潜在错误,...

    Generic_3(泛型限定(下限)-泛型限定(上限的体现)-泛型限定(下限的体现)-泛型限定(通配符的体现)-集合查阅的技巧)

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...

    实例190 - 泛型化的折半查找法

    在Java中,传统的折半查找通常针对特定类型的数组(如整数或字符串)编写,而泛型化折半查找则可以适应任何实现了Comparable接口的对象数组。下面我们将详细探讨这个主题: 1. **泛型基础**: - 泛型引入了类型...

    29-API-集合框架-泛型-使用_java_

    Java 泛型是Java编程语言中的一个重要特性,它在2004年随着...这个视频教程"29-API-集合框架-泛型-使用"应该会深入浅出地讲解这些概念,对于想要提升Java编程技能的初学者或有经验的开发者来说,都是很好的学习资源。

    关于java基础的泛型的练习

    - 由于历史原因,Java不支持泛型数组的直接创建,如`new MyList[5]`是非法的。 - 可以通过类型安全的工厂方法或运行时转型解决这个问题。 通过以上知识点,我们可以看到Java泛型在编程中的重要性和灵活性。理解和...

    java基础-泛型学习总结

    思维导图

    JAVA设计模式--程序设计--反射--注解--泛型

    Java设计模式、程序设计、反射、注解和泛型是Java开发中的核心概念,它们各自在不同的场景下发挥着重要作用,构建出高效、可维护的软件系统。 首先,Java设计模式是面向对象编程中的一种最佳实践,是解决常见问题的...

    fantj2016#java-reader#10. Java反射---泛型1

    而不是创建一个Object列表,你可以参数化java.util.List来创建一个String String列表,如下所示:当通过反射在运行时检查可参数化类型本

    后端研究-泛型机制在Apla-Java程序生成系统中实现的方法研究.pdf

    后端研究-泛型机制在Apla-Java程序生成系统中实现的方法研究 泛型机制是一种高级编程语言的重要机制,它可以提高软件的可靠性和生产效率。近年来,软件行业对泛型机制的研究和实现达到了新的高度。本文将研究在Apla...

    C#学习之路--泛型

    在“C#学习之路--泛型”这个主题中,我们将深入探讨泛型的基本概念、泛型的定义和类型参数、泛型类和泛型接口,以及泛型委托和泛型事件。 **泛型的基本概念** 泛型是C# 2.0引入的一个新特性,它的核心思想是推迟...

    JAVA-泛型基本讲解

    1、Java泛型是J2 SE1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。...

Global site tag (gtag.js) - Google Analytics