您的位置:首页 > 其它

实现泛型数组可以对Integer和String类型的数组排序

2017-08-02 11:40 351 查看

题目



解析

此题主题就是实现一个泛型类,使之能持有一个数组,数组类型有泛型类的类型参数决定,所以我们可以为泛型类在域中添加一个数组。再来说排序,我们这里为了解决问题,就不自己实现排序了,直接使用Arrays类中static sort()排序算法,同时添加一个add()方法可以实现对域中数组进行添加,最后重写这个类的toString()使之能够按照格式输出我们的想要的数组样式。

代码

package com.study.mengyi.operate;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 泛型数组类,可以添加,排序
* @ClassName MoreArray
* @Description
* @Author Meng Yi
* @Date 2017年8月2日 上午10:20:59
* @param <T>
*/
class MoreArray<T>{
private T[] array;
private int index;
@SuppressWarnings("unchecked")
public MoreArray(int size){
array = (T[]) new Object[size];
}
public void add(T item){
array[index++]=item;
}
public T[] getArray(){
return array;
}
public int getInt(){
return index;
}
public void sort(){
/**
* Arrays.sort()的排序方法,第三个参数为数组的实际的长度
* 若不指定实际长度,会因为数组中的空元素排序,造成抛出NullPointerException
*/
Arrays.sort(array, 0, index);
}
/**
* 自定义格式化输出数组
*/
public String toString(){
StringBuilder result = new StringBuilder();
for(T item:array)
if(item!=null){
String str = String.valueOf(item)+'\n';
result.append(str);
}
return result.toString();
}
}
/**
*
* @ClassName ZhiZhang
* @Description
* @Author Meng Yi
* @Date 2017年8月2日 上午10:23:35
*/
public class ZhiZhang {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int num = input.nextInt();
MoreArray<Integer> integerArray = new MoreArray<Integer>(num);
MoreArray<String>  stringArray  = new MoreArray<String>(num);
for(int i=0;i<num;i++){
String str = input.next();
if(isNum(str)) integerArray.add(Integer.parseInt(str));
else           stringArray.add(str);
}
integerArray.sort();
stringArray.sort();
System.out.println(integerArray.toString()+stringArray.toString());
}
/**
* 判断字符串是否是数值型
* @param str
* @return
*/
public static boolean isNum(String str){
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
if( !isNum.matches() ){
return false;
}
return true;
}
}


运行结果



总结

注意Java的中泛型是由于擦除的方法实现的,所以我们不能直接 new T[],因为T的类型在编译时期类型检查之后被擦除了,所以在运行时无法获取T的实际类型,所以无法new这个类型数组,所以只能生成Object数组,然后转型为T[],其实这里转型在实际上并没转型,只是为了让能通过编译!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐