Java泛型,返回数组最大值最小值

编写一个泛型方法,能够返回一个int类型数组的最大值和最小值,String类型数组的最大值和最小值(按字典排序).


先判断输入类型,再根据情况找值。
看得清吧题主

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-11-27
public class NumFunc {
T[] a;

NumFunc(T[] a) {
this.a = a;
}

/**
* 最小值
* @return 最小值
*/
public T minValue() {
T min = this.a[0];
for (int i = 1; i < this.a.length; i++){
if (a[i].toString().compareTo(min.toString())<0){
min = a[i]; // 未对参数类型 T, T 定义运算符 <
}
}
return min;
}

/**
* 最大值
* @return 最大值
*/
public T maxValue() {
T max = this.a[0];
for (int i = 1; i < this.a.length; i++)
if (a[i].toString().compareTo(max.toString())>0){
max = a[i]; // 未对参数类型 T, T 定义运算符 <
}
return max;
}

/**
* 平均值
* @return 平均值
*/
@SuppressWarnings("unchecked")
public T aveValue() {
//没有特别好的方法,你先用这个方法逐一些吧:Byte、Double、Float、Integer、Long、Short
if (this.a instanceof Double[]) {
Double ave=0.0;
for (int i = 0; i < this.a.length; i++)
ave+=Double.valueOf(a[i].toString());
ave=ave/this.a.length;
return (T)ave;
}

if (this.a instanceof Integer[]) {
Double ave=0.0;
for (int i = 0; i < this.a.length; i++)
ave+=Integer.valueOf(a[i].toString());
ave=ave/this.a.length;
return (T)ave;
}

//.....
return null;
}

public static void main(String[] args) {
Integer[] i = { 9, 1, 2, 5, };
Double[] d = { 1.0, 1.1111 };
NumFunc v = new NumFunc(i);
NumFunc vs = new NumFunc(d);
System.out.println("最小值:" + vs.minValue());
System.out.println("最大值:" + vs.maxValue());
System.out.println("平均值:" + v.aveValue());
System.out.println("平均值:" + vs.aveValue());
}
}本回答被提问者采纳
第2个回答  2018-11-28
public class Test {
public static void main(String[] args) {
//因为泛型的类型参数只能是引用类型,
//所以这里利用了java的自动包装机制
//注意:Integer和String类都实现了Comparable<T>接口
Integer[] arrint={12,7,9,25,36,88,1001,90};
IMinMax<Integer> i1=new MinMaxImpl<Integer>(arrint);
System.out.println(i1.toString());
System.out.println();
String[] arrstring={"green","pick","finally","much","deal","listen","what","cookie"};
IMinMax<String> i2=new MinMaxImpl<String>(arrstring);
System.out.println(i2.toString());
System.out.println();

// 下面的用来演示要使用MinMaxImpl类求某种类型的数组的最大值,最小值,
// 此类型必须实现Comparable<T>接口
// 正确,类C实现了Comparable<C>接口
C[] arrc={new C(2),new C(1),new C(2),new C(4),new C(7),new C(5)};
IMinMax<C> i3=new MinMaxImpl<C>(arrc);
System.out.println(i3.toString());
System.out.println();
// 错误,类D没有实现Comparable<D>接口
// D[] arrd={new D(2),new D(1),new D(2),new D(4),new D(7),new D(5)};
// IMinMax<D> i4=new MinMaxImpl<D>(arrd);
// System.out.println(i4.toString());
// System.out.println();
}
}
interface IMinMax<T>
{
T getMinValue();
T getMaxValue();
}
class MinMaxImpl<T extends Comparable<T>> implements IMinMax<T>
{
MinMaxImpl(T[] d)
{
data=d;
findMinMaxValue();
}
private void findMinMaxValue()
{
StringBuilder sb=new StringBuilder();
T min=max=data[0];

for(int i=1;i<data.length;i++)
{
if(data[i].compareTo(min)<0)
min=data[i];
else if(data[i].compareTo(max)>0)
max=data[i];
}
if(null==data || 0==data.length)
sb.append("数组长度为0");
else
{
sb.append("数组:");
for(int i=0;i<data.length-1;i++)
{
sb.append(data[i]);
sb.append(',');
}
sb.append(data[data.length-1]);
sb.append(MinMaxImpl.NewLine);
sb.append(String.format("的最大值是:%s,最小值是:%s%s",max,min,MinMaxImpl.NewLine));
}
str=sb.toString();
}
public T getMinValue()
{
return min;
}
public T getMaxValue()
{
return max;
}
public String toString()
{
return str;
}
private static final String NewLine=System.getProperty("line.separator");
private T[] data;
private T min,max;
private String str;
}
class C implements Comparable<C>
{
C(int i)
{
v=i;
}
public String toString()
{
return "C("+v+")";
}
public int compareTo(C o)
{
return Integer.valueOf(v).compareTo(Integer.valueOf(o.v));
}
private int v;
}
class D
{
D(int i)
{
v=i;
}
public String toString()
{
return "D("+v+")";
}
private int v;
}追答

JAVA中的泛型用法一种: <T> 返回值用法。
4、泛型也是可以限制要使用的参数类型的,比如上面,list集合中,只想加入数字类型的数据,当然也是可以的,只要让类中的T继承Number就行了,如图所示。5、下面在测试一下,向集合中添加一个Long类型的数据并打印,如图所示。6、最后输出就完成了。

java程序中从键盘输入一组数组并输出,再输出其中最大值和最小值
} System.out.println("\\n最大值:max="+max );System.out.println("最小值:min="+min );} } 这个不知道满不满足要求呢?

Java中的泛型的问题?
this.type=(Class<T>)types[0];\/\/上面两句是获取运行期的泛型类型,返回给当前对象(this)的type属性 }

java泛型方法可以返回 List<T> 吗?
答案是肯定的!public class Demo01<E> {private List<E> list = new ArrayList<E>();public List<E> store(E[] arr){list = Arrays.asList(arr);return list;}public static void main(String[] args) {Demo01<String> d = new Demo01<>();String animals[] = {"Cat","Dog","Pi...

Java List集合Stream流的使用(常用方法)
五、根据条件对数据进行求和,适用于需要统计特定条件下数据总和的场景。六、按条件对数据进行分组,便于后续对不同组的数据进行单独处理。七、针对List泛型集合,根据id进行分组,获取每组中的最小值,实现数据的精细化筛选。八、同样针对List泛型集合,根据id进行分组,获取每组中的最大值,用于查找最大...

java学习,泛型方法的泛型参数的判断问题。谢谢~
fromArrayToCollection(Number[] a, Collection<Number> c)泛型类型推断有个重要的规则:当某个类型变量在整个参数列表中的所有参数和返回值中的多处被应用了,如果调用方法时这多处的实际应用类型对应到了不同的类型,且没有使用返回值,这时候取多个参数中的最大交集类型 这种泛型, 我建议使用 限定...

java中一个方法的返回值可能是integer或者Double,请问该怎么定义泛型...
泛型方法可类型如下定义:public <T> T function(参数){ return ...;} T推导成何种类型,看如果调用 例如:int i = function();\/\/T = Integer Object o = function();\/\/T = Object 然而无论T为何种类型,推导之后的T都是唯一的,其实就是函数的返回值类型,是确定的。从这个角度来说,设...

Mybatis如何通过泛型来动态调整返回参数
这里我们要说的是如何给方法加入泛型,以满足返回值类型不同的情况。方法加泛型,自然就是用来<T>修饰了,如下代码。<T>TfindDemo();上面的代码就可以使用任何返回类型来接收了。但是很重要的一点,当resultType=java.util.Map的时候,这样写的时候是会报错的。所以我们就改写了一种的方式。<T>List<...

java中泛型是什么意思
可以使用T表示任意类型,E表示元素类型,K和V表示键和值类型。例如在List中,T表示集合里面元素的类型。声明泛型类或接口时,也可以对泛型参数进行限制,例如限制T必须是某个类的子类、实现某个接口等等。泛型的最大优点是可以在编译时检查类型安全,避免运行时错误。泛型可以提高代码的可读性、可维护性和...

为什么java的泛型要用'擦除'实现?
Java选择泛型擦除技术,保持了向后兼容性,允许新老代码无缝切换。举个例子,假设我们有两个Java函数,一个返回类型为T,另一个你手动将其强制转换为Object。这两段代码在编译阶段生成的汇编码是一样的,最终在运行时都会加入一条checkcast指令,以确保类型匹配。这就是泛型擦除确保代码兼容性的方式。

相似回答