实现泛型数组可以对Integer和String类型的数组排序
来源:互联网 发布:java从入门到实践 编辑:程序博客网 时间:2024/06/16 11:06
题目
解析
此题主题就是实现一个泛型类,使之能持有一个数组,数组类型有泛型类的类型参数决定,所以我们可以为泛型类在域中添加一个数组。再来说排序,我们这里为了解决问题,就不自己实现排序了,直接使用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[],其实这里转型在实际上并没转型,只是为了让能通过编译!
阅读全文
1 0
- 实现泛型数组可以对Integer和String类型的数组排序
- 测试int和Integer数组的排序/快速排序实现
- 设计一个公共的class,通过它的接口可以对任何类型的数组排序
- 设计一个公共的class,通过它的接口可以对任何类型的数组排序
- String类型数组与Integer类型数组之间转化
- 实现对数组的降序排序
- qsort()实现对字符数组的排序
- 数组的排序和类型转换
- 类型后面三个点(String...)和数组(String[])的区别
- 类型后面三个点(String...)和数组(String[])的区别
- 类型后面三个点(String...)和数组(String[])的区别
- 数组-对引用类型的排序-冒泡法
- 冒泡排序函数,可以给任意类型的数据排序,比如整形数组,字符数组,字符串数组等
- 排序实现对字符串数组的排序,待改进.
- java 之Sting类型的List集合的汉字排序和String类型数组的汉字排序及List<Bean>排序
- 对一个数组进行排序,这个数组可以是整型、浮点型
- 自定义数组类型的排序
- C++ string和c类型字符数组的比较
- Java 序列化相关操作
- 监听滚动条事件
- 简单介绍函数参数缺省与函数重载
- Monitor
- 欢迎使用CSDN-markdown编辑器
- 实现泛型数组可以对Integer和String类型的数组排序
- [leetcode]51. N-Queens
- 实验楼2017/8/2
- 系统设计---算法与架构
- java通信系列之一by_书訢:通信基础和简单服务器客户端创建
- iOS KVO基础知识
- 二叉搜索树的后序遍历序列
- VGA 之 全红
- Android Studio使用教程、工程目录结构、使用注意事项、常用开发小技巧-Android基础知识整理