看《java开发实战经典》这本书,泛型那章的习题:
按照要求定义一个操作类:要求完成一个一维数组操作类,其中可以加入任意类型的数据,数组具体的操作类型由程序外部决定,并且可以实现查询功能。刚开始学编程,有点头大,哪位能指点指点,多谢多谢!

解决方案 »

  1.   

    泛型里面写Object类不就可以了
      

  2.   

    参数或者类属性使用object,然后外部使用强制转换?
      

  3.   

    Object数组,然后根据枚举,判断存储的类型进行强转。
      

  4.   


    public <T> List<T> arrayOperation(String param)
        {
            List<T> arr = new ArrayList<T>();
            .......
        }方法加泛型,调用时指定泛型类型,如
    List<Integer> arr = xxClass.arrayOperation("xxxx");
    List<String> arr = xxClass.arrayOperation("xxxx");
      

  5.   

    用arraylist实现?这个还没看到,书上应该是让用最基本的语句来实现,我琢磨了很久不会弄,麻烦您给个完整的代码我学习学习,多谢!
      

  6.   

    仅供参考:
    public class TestArray<T> //define a class generic
    {
    private T[] arrayT1; public TestArray()
    {
    arrayT1 = null;
    }
    public TestArray(T[] arrayT1)
    {
    this.arrayT1 = arrayT1;
    }
    public T[] getFirst()
    {
    return arrayT1;
    }
    public void setFirst(T[] newValue1)
    {
    this.arrayT1=newValue1;
    }
    //数组长度。
    public int size(){
    if(null == arrayT1){//数组未定义,返回负值。
    return -1;
    }
    return arrayT1.length;
    }

    //取出数组给定下标的值。
    public T getT_fromArrayT1(int k){
    if(null == arrayT1 || k<0 || k >= arrayT1.length){
    System.out.println("数组未定义或给定值超出范围!");
    return null;
    }
    return arrayT1[k];
    }

    /**
     * main method
     */
    public static void main(String[] args){
    //定义两个不同数组。
    String[] strArray = {"123","456","789"};
    Integer[] intArray = {100,200,333};
    //用字符串数组
    TestArray<String> t1 = new TestArray<String>();
    t1.setFirst(strArray);
    //用Integer 型
    TestArray<Integer> t2 = new TestArray<Integer>();
    t2.setFirst(intArray); for(int i = 0; i<t1.size(); i++){
    System.out.println("t1["+i+"] = "+ t1.getT_fromArrayT1(i));
    }
    for(int i = 0; i<t2.size(); i++){
    System.out.println("t2["+i+"] = "+ t2.getT_fromArrayT1(i));
    }
    }
    }
      

  7.   

    题目明明说的是一维数组操作类啊,也就是说类方法的参数是一维数组public class TestEnum<T> {  public void printTs(T[] ts) {
        if (ts == null || ts.length == 0) {
          return;
        }
        for (T t : ts) {
          System.out.println(t);
        }
      }}
      

  8.   


    class MyArray<T>{
    private T array[];
    MyArray(T array[]){
    this.setMyArray(array);
    }
    public void setMyArray(T array[]){
    this.array=array;
    }
    public T[] getMyArray(){
    return this.array;
    }
    public void search(T key){
    boolean flag=false;
    int temp=0;
    for(int i=0;i<this.array.length;i++){
    if(array[i]==key){
    flag=true;
    temp=i;
    }
    }
    if(flag){
    System.out.println("找到数据,位置在:"+temp);

    }else{
    System.out.println("没有找到数据");
    }
    }
    }
    public class XiTi10 {
    public static void main(String args[]){
    String str[]={"abc","def","ghi","jkl"};
    MyArray <String> arr1=new MyArray<String>(str);
    arr1.search("ghi");
    int str2[]={4,5,6,7,8};
    Integer[] str3 = new Integer[str2.length];
    for(int i=0;i<str2.length;i++){
    str3[i]= new Integer(str2[i]);
    }
    MyArray <Integer> arr2=new MyArray<Integer>(str3);
    Integer i=new Integer(6);
    arr2.search(i);
    }
    }
    我这样写的,为什么Integer数组的查找不成功?是哪里不对了?
      

  9.   


    if(array[i]==key){
                    flag=true;
                    temp=i;
                }
    改成if(array[i].equals(key)){
                    flag=true;
                    temp=i;
                }
      

  10.   

    import java.util.Arrays;
    import java.util.Collection;/**
     * Generic array.
     */
    public class MyArray<E> {
      
      @SuppressWarnings("unchecked")
      private final E[] arr;
      
      public MyArray(int size) {
        
        if( size < 0 )
          throw new IllegalArgumentException("Invalid array size: " + size);
        
        arr = (E[])new Object[size];
      }
      
      public MyArray(Collection<E> col) {
        
        this(col.size()); // throws NullPointerException if col == null
        
        int index = 0;
        for(E element : col)
          arr[index++] = element;
      }
      
      public int length() {
        
        return arr.length;
      }
      
      public E get(int index) {
        
        return arr[index]; // potentially throws ArrayIndexOutOfBoundsException
      }
      
      public void set(int index, E value) {
        
        arr[index] = value; // potentially throws ArrayIndexOutOfBoundsException
      }
      
      public int indexOf(E value) { // (search)
        
        for(int i=0; i<arr.length; i++) {
          
          E element = arr[i];
          if( element == value )
            return i;
          if( element != null && element.equals(value) )
            return i;
        }
        return -1;
      }
      
      public static void main(String[] args) {
        
        MyArray<String> arr1 = new MyArray<String>(
                Arrays.asList("abc", "def", "ghi", "jkl"));
        
        String search1 = "ghi";
        System.out.println("Index of " + search1 + " is : " + arr1.indexOf(search1));
        
        MyArray<Integer> arr2 = new MyArray<Integer>(Arrays.asList(4, 5, 6, 7, 8));
        
        Integer search2 = 6;
        System.out.println("Index of " + search2 + " is : " + arr2.indexOf(search2));
      }
    }
      

  11.   


    class MyArray<T>{
    private T array[];
    MyArray(T array[]){
    this.setMyArray(array);
    }
    public void setMyArray(T array[]){
    this.array=array;
    }
    public T[] getMyArray(){
    return this.array;
    }
    public void search(T key){
    boolean flag=false;
    int temp=0;
    for(int i=0;i<this.array.length;i++){
    if(array[i].equals(key)){
    flag=true;
    temp=i;
    }
    }
    if(flag){
    System.out.println("找到数据,位置在:"+temp);

    }else{
    System.out.println("没有找到数据");
    }
    }
    }
    public class XiTi10 {
    public static void main(String args[]){
    String str[]={"abc","def","ghi","jkl"};
    MyArray <String> arr1=new MyArray<String>(str);
    arr1.search("ghi");
    Integer str2[]={4,5,6,7,8};
    MyArray <Integer> arr2=new MyArray<Integer>(str2);
    arr2.search(7);
    Float str3[]={5.6f,6.7f,4.5f,5.8f};
    MyArray <Float> arr3=new MyArray<Float>(str3);
    arr3.search(5.8f);
    }
    }这样算不算完成作业的要求了?
    另外还想请教大家,int数组怎么变成Integer数组?jdk里有现成的方法没?都得自己写:
    int str2[]={4,5,6,7,8};
    Integer[] str3 = new Integer[str2.length];
    for(int i=0;i<str2.length;i++){
    str3[i]= new Integer(str2[i]);
    }
      

  12.   

    如果你不想妹子都写这样的数组转换  你可以自己写个封装的类去做 每次去调用这个类里面的方法public class IntegerUtil {
    public static Integer[] change(int[] a){
    Integer[] inter = new Integer[a.length];
    for(int i=0;i<a.length;i++){
    inter[i]= new Integer(a[i]);
    }
    return inter;

    }然后想要调用的时候就int str2[]={4,5,6,7,8};
         Integer[] in = IntegerUtil.change(str2);
         for(Integer i : in){
         System.out.println(i);
         }
      

  13.   

     arr = (E[])new Object[size]; 
    这一句提示:未经检查的强制类型转换,这个应该怎么处理,程序可以运行,结果也对,就是看着这个提示不是很爽啊。
      

  14.   

    @SuppressWarnings("unchecked")
    public MyArray(int size) {