Java中的泛型线性搜索

Java中的泛型线性搜索,java,arrays,generics,Java,Arrays,Generics,我必须“为线性搜索实现以下通用方法”,但据我所知,不可能有通用数组。我的同学没有一个能弄明白,我们班的助教也没有。这可能吗?如果可能的话,你能给我指出正确的方向吗 public static void main(String[] args){ Scanner scan = new Scanner(System.in); String type = scan.next(); int length = scan.nextInt(); //checks the

我必须“为线性搜索实现以下通用方法”,但据我所知,不可能有通用数组。我的同学没有一个能弄明白,我们班的助教也没有。这可能吗?如果可能的话,你能给我指出正确的方向吗

public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    String type = scan.next();
    int length = scan.nextInt();
    
    //checks the type and makes the appropriate array
    if (type.equals("I")) {
        int[] anArray = new int[length];
        for (int i = 0; i<length; i++) {
            anArray[i] = scan.nextInt();
        }
        int key = scan.nextInt();
        linearSearch(anArray, key); //Error, the method is not applicable for the arguments
    }
}

public static <E extends Comparable<E>> int linearSearch(E[] list, E key) {
    for (int i = 0; i<list.length; i++) {
        if (list[i].equals(key)) {
            return i;
        }
    }
    return 0;
}
publicstaticvoidmain(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
字符串类型=scan.next();
int length=scan.nextInt();
//检查类型并生成适当的数组
if(类型等于(“I”)){
int[]anArray=新的int[长度];
对于(int i=0;i
  • 不能在Java中创建泛型数组

  • 您当然可以使用对数组的泛型引用

  • 如图所示的代码的问题是您有一个基本数组,泛型只能与引用一起工作

如果使用
Integer[]
而不是
int[]
程序将正常工作。

  • 不能在Java中创建泛型数组

  • 您当然可以使用对数组的泛型引用

  • 如图所示的代码的问题是您有一个基本数组,泛型只能与引用一起工作


如果使用
Integer[]
而不是
int[]
程序将正常工作。

数组元素必须是实现可比较的对象,因此应使用整数数组:

Integer[] anArray = new Integer[length];

数组的元素必须是实现可比较的对象,因此应使用整数数组:

Integer[] anArray = new Integer[length];

泛型不允许与原语一起使用,您将需要使用包装整数类,因此

Integer[] anArray = new Integer[length];

泛型不允许与原语一起使用,您将需要使用包装整数类,因此

Integer[] anArray = new Integer[length];

您只需将
anArray
类型设置为
compariable
并且
java.lang.Integer
具有
compariable
类型。代码:

package com.stackoverflow.json;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String type = scan.next();
        int length = scan.nextInt();

        // checks the type and makes the appropriate array
        if (type.equals("I")) {
            Integer[] anArray = new Integer[length];
            for (int i = 0; i < length; i++) {
                anArray[i] = scan.nextInt();
            }
            int key = scan.nextInt();
            Comparable result = linearSearch(anArray, key); // Error, the method is not applicable
                                        // for the arguments
            System.out.println(result);
        }
    }

    public static <E extends Comparable<E>> int linearSearch(E[] list, E key) {
        for (int i = 0; i < list.length; i++) {
            if (list[i].equals(key)) {
                return i;
            }
        }
        return 0;
    }

}

请注意,
result
是数组中搜索元素的索引
anArray

您只需将
anArray
类型设置为可比较
java.lang.Integer
具有可比较
类型。代码:

package com.stackoverflow.json;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String type = scan.next();
        int length = scan.nextInt();

        // checks the type and makes the appropriate array
        if (type.equals("I")) {
            Integer[] anArray = new Integer[length];
            for (int i = 0; i < length; i++) {
                anArray[i] = scan.nextInt();
            }
            int key = scan.nextInt();
            Comparable result = linearSearch(anArray, key); // Error, the method is not applicable
                                        // for the arguments
            System.out.println(result);
        }
    }

    public static <E extends Comparable<E>> int linearSearch(E[] list, E key) {
        for (int i = 0; i < list.length; i++) {
            if (list[i].equals(key)) {
                return i;
            }
        }
        return 0;
    }

}
请注意,
result
是数组
anArray