java新手提问:如何利用泛型实现一个一维数组操作类,可加入任意类型的数据。

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

刚开始学编程,有点头大,哪位能指点指点,多谢多谢!
...全文
1101 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
oBlackDeath 2016-03-23
  • 打赏
  • 举报
回复
刚好看到这里,受教了
抱抱枯叶 2013-07-18
  • 打赏
  • 举报
回复
如果你不想妹子都写这样的数组转换 你可以自己写个封装的类去做 每次去调用这个类里面的方法

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);
    	}
  • 打赏
  • 举报
回复
引用 25 楼 Acesidonu 的回复:
@SuppressWarnings("unchecked") public MyArray(int size) {
谢谢!这个还没学到,呵呵
Acesidonu 2013-07-18
  • 打赏
  • 举报
回复
@SuppressWarnings("unchecked") public MyArray(int size) {
  • 打赏
  • 举报
回复
引用 19 楼 raistlic 的回复:


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));
  }
}
arr = (E[])new Object[size]; 这一句提示:未经检查的强制类型转换,这个应该怎么处理,程序可以运行,结果也对,就是看着这个提示不是很爽啊。
  • 打赏
  • 举报
回复
引用 22 楼 xiuxiu2by 的回复:
如果你不想妹子都写这样的数组转换 你可以自己写个封装的类去做 每次去调用这个类里面的方法

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);
    	}
这个我会,就是想问问有没有现成的类已经实现这个功能了。
  • 打赏
  • 举报
回复

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数组的查找不成功?是哪里不对了?
  • 打赏
  • 举报
回复
参数或者类属性使用object,然后外部使用强制转换?
HinanaiTenshi 2013-07-17
  • 打赏
  • 举报
回复
题目明明说的是一维数组操作类啊,也就是说类方法的参数是一维数组

public class TestEnum<T> {

  public void printTs(T[] ts) {
    if (ts == null || ts.length == 0) {
      return;
    }
    for (T t : ts) {
      System.out.println(t);
    }
  }

}
ZZZ5512536 2013-07-17
  • 打赏
  • 举报
回复
你那些红花是哪里得来的?? 看看14L的代码吧
nmyangym 2013-07-17
  • 打赏
  • 举报
回复
仅供参考:


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));
		}
	}
}
Acesidonu 2013-07-17
  • 打赏
  • 举报
回复
看看ArrayList的源码
  • 打赏
  • 举报
回复
引用 10 楼 peng_hao1988 的回复:

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");
用arraylist实现?这个还没看到,书上应该是让用最基本的语句来实现,我琢磨了很久不会弄,麻烦您给个完整的代码我学习学习,多谢!
  • 打赏
  • 举报
回复
引用 1 楼 a1006570862 的回复:
大哥啊,你的小红花深深地出卖了你啊
编程我真的是小白一个哦,刚开始学。
桃园闲人 2013-07-17
  • 打赏
  • 举报
回复

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");
li_yu_c 2013-07-17
  • 打赏
  • 举报
回复
引用 4 楼 oh_Maxy 的回复:
Object数组,然后根据枚举,判断存储的类型进行强转。
同不会,谁敢写写看看?
li_yu_c 2013-07-17
  • 打赏
  • 举报
回复
引用 5 楼 Acesidonu 的回复:
定义一个参数类型不就行了。
同不会,谁敢写写看看?
li_yu_c 2013-07-17
  • 打赏
  • 举报
回复
引用 2 楼 a1006570862 的回复:
泛型里面写Object类不就可以了
同不会,谁敢写写看看?
朗晴 2013-07-17
  • 打赏
  • 举报
回复
不会,帮顶。 关注.
Acesidonu 2013-07-17
  • 打赏
  • 举报
回复
定义一个参数类型不就行了。
加载更多回复(7)

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧