实现泛型数组可以对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[],其实这里转型在实际上并没转型,只是为了让能通过编译!相关文章推荐
- 如何实现将String类型数组转换成int类型 并进行排序
- 实现一个bubble_sort函数,可以完成int ,float,char,string类型的排序
- java面试要点---ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。
- 冒泡排序函数,可以给任意类型的数据排序,比如整形数组,字符数组,字符串数组等
- 在c++Builder中使用boost正则表达式实现的查找double和int类型的字符串,并实现StringToInteger和StringToDouble函数
- 用泛型实现在数组模拟入栈出栈时多类型的使用
- 使用反射在泛型为Integer的ArrayList中添加String类型的数据
- 《C++标准函数库》中说的有三个函数可以将字符串的内容转换为字符数组和C—string (CString、char*、String三种类型互换)
- 再谈怎样以最简单的方法将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式
- java5核心基础之泛型(3)-泛型作用于编译阶段-如何将String对象传入Integer类型的泛型对象中?
- TreeSet集合存放自定义类型的对象,可以使用比较器,实现Comparable接口自己设置排序方式
- 在泛型为Integer的ArrayList中存放一个String类型的对象。
- <笔试><面试>编写一个排序函数,实现,既可以排序整形数组,又可以排序字符串。
- java String[]字符串数组自动排序的简单实现
- 类型“string”必须是不可以为 null 值的类型才能用作泛型类型或方法“System.Nullable<T>”中的参数“T”
- 使用回调函数实现一个通用的冒泡排序,可以排序不同的数据类型。
- 在泛型为Integer的ArrayList中存放String类型的对象
- List<T>泛型数组API自带的Sort() 排序方法根据自定义排序实现
- 冒泡排序函数,可以给任意类型的数据排序,比如整形数组,字符数组,字符串数组等
- 关于C中字符数组,字符指针以及C++中string类型的两两转换及排序