该文章代码来源《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编程中的一个重要概念,它提供了一种在编译时期检查类型安全性的机制,同时也减少了强制类型转换的需要。泛型主要应用于类、接口和方法中,用来限制可以存储或处理的数据类型。 1. **泛型的意义**: - ...
泛型是Java语言的一个重要特性,首次出现在Java SE 1.5版本中。它的引入主要是为了解决在集合操作中类型安全性的问题,并通过引入参数化类型的概念,提高了代码的复用性与可读性。 ### 泛型概念 泛型,即参数化...
Java 泛型编程是Java语言在JDK 1.5版本引入的一项重要特性,它极大地提高了代码的安全性和可重用性。泛型本质上是参数化类型,允许我们在编写代码时,将数据类型作为参数,这使得类、接口和方法能够处理多种不同的...
java-泛型-面试题.docx
Java集合和泛型面试题 本文将从Java集合和泛型两个方面对知识点进行详细的讲解,并对ArrayList、LinkedList、HashMap、HashTable等数据结构进行对比分析。 ArrayList和LinkedList的区别 ArrayList和LinkedList都...
Java泛型不支持泛型数组。这是由于类型擦除导致的限制,因为所有泛型数组在运行时都将被视为`Object[]`。因此,直接创建泛型数组是不可行的,但可以通过其他方式间接实现。 #### 七、泛型与反射 反射可以用来获取...
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
11.4java-泛型(Generic)
Java泛型是Java编程语言中的一种特性,它允许在数据结构(如集合)中存储特定类型的元素,从而提供了编译时的类型安全性和更清晰的代码。泛型引入的主要目标是消除强制类型转换的需要,减少类型转换带来的潜在错误,...
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
在Java中,传统的折半查找通常针对特定类型的数组(如整数或字符串)编写,而泛型化折半查找则可以适应任何实现了Comparable接口的对象数组。下面我们将详细探讨这个主题: 1. **泛型基础**: - 泛型引入了类型...
Java 泛型是Java编程语言中的一个重要特性,它在2004年随着...这个视频教程"29-API-集合框架-泛型-使用"应该会深入浅出地讲解这些概念,对于想要提升Java编程技能的初学者或有经验的开发者来说,都是很好的学习资源。
- 由于历史原因,Java不支持泛型数组的直接创建,如`new MyList[5]`是非法的。 - 可以通过类型安全的工厂方法或运行时转型解决这个问题。 通过以上知识点,我们可以看到Java泛型在编程中的重要性和灵活性。理解和...
思维导图
Java设计模式、程序设计、反射、注解和泛型是Java开发中的核心概念,它们各自在不同的场景下发挥着重要作用,构建出高效、可维护的软件系统。 首先,Java设计模式是面向对象编程中的一种最佳实践,是解决常见问题的...
而不是创建一个Object列表,你可以参数化java.util.List来创建一个String String列表,如下所示:当通过反射在运行时检查可参数化类型本
后端研究-泛型机制在Apla-Java程序生成系统中实现的方法研究 泛型机制是一种高级编程语言的重要机制,它可以提高软件的可靠性和生产效率。近年来,软件行业对泛型机制的研究和实现达到了新的高度。本文将研究在Apla...
在“C#学习之路--泛型”这个主题中,我们将深入探讨泛型的基本概念、泛型的定义和类型参数、泛型类和泛型接口,以及泛型委托和泛型事件。 **泛型的基本概念** 泛型是C# 2.0引入的一个新特性,它的核心思想是推迟...
《GP-泛型算法通则》是一份深入探讨GP(Genetic Programming)算法与泛型编程相结合的资源包。GP算法是一种基于生物进化原理的计算方法,它模仿自然选择和遗传过程来解决复杂问题,而泛型编程是编程语言中的一种技术...