Java中使用泛型实现颠倒任意数组中的所有元素

标题:Java中使用泛型实现颠倒任意数组中的所有元素

一、分析

  • 方法playEle02:新建一个Object数组,实现交换,
    return (T[])str;//str为数组类型,将T[]当作一个类型使用此处的强制转换会有问题,
    因为Object[] str=new Object[arr.length];为Object数组,里面的元素也为Object类型,故强制转换有问题
public <T> T[] playEle02(T[] arr) {
		int j=arr.length-1;
		Object[] str=new Object[arr.length];//此处创建的为Object数组,里面的元素也都是Object类型,故return处的强制转换会有问题。
		for(int i=0;i<arr.length;i++) {
			str[j--]=arr[i];
		}
	
		if(str instanceof Object) {
			System.out.println("hhhh");
		}
		
		return (T[])str;//str为数组类型,将T[]当作一个类型使用
	}
  • 方法playEle03比较好,没有新生成一个数组,故不需要强制转型,
    思路是,比较数组的start【0号位】,和end【length-1】号位,若满足start<end,则交换,两个变量start、end移动,重复上述步骤。
public <T> T[] playEle03(T[] arr) {
		int start=0;
		int end=arr.length-1;
		
		while(start<end) {
			T temp=arr[start];
			arr[start]=arr[end];
			arr[end]=temp;
			
			start++;
			end--;
		}
		
		return arr;
	}

完整代码如下:

	//2.编写一个泛型方法 接收一个任意数组 并颠倒数组中的所有元素
	@Test
	public void test02() {
		System.out.println("String[]");
		Object[] str=this.playEle03(new String[] {"aa","bb","cc","dd"});//使用Object[]来接收
		for(Object s:str) {
			System.out.print(s+" ");
		}
		
		System.out.println("\r\n"+"Integer[]");
		str=this.playEle03(new Integer[] {1,2,3});
		for(Object s:str) {
			System.out.print(s+" ");
		}
	}
	
//	public String[] playEle(String[] arr) {
//		int j=arr.length-1;
//		String[] str=new String[arr.length];
//		for(int i=0;i<arr.length;i++) {
//			str[j--]=arr[i];
//		}
//	
//		if(str instanceof Object) {
//			System.out.println("hhhh");
//		}
//		
//		return str;//str为数组
//	}
	
	public <T> T[] playEle02(T[] arr) {
		int j=arr.length-1;
		Object[] str=new Object[arr.length];//此处创建的为Object数组,里面的元素也都是Object类型,故return处的强制转换会有问题。
		for(int i=0;i<arr.length;i++) {
			str[j--]=arr[i];
		}
	
		if(str instanceof Object) {
			System.out.println("hhhh");
		}
		
		return (T[])str;//str为数组类型,将T[]当作一个类型使用
	}
	
	@Test
	public void test03() {
		System.out.println("String[]");
		String[] str=this.playEle03(new String[] {"aa","bb","cc","dd"});//使用Object[]来接收
		for(String s:str) {
			System.out.print(s+" ");
		}
		
		System.out.println("\r\n"+"Integer[]");
		Integer[] str02=this.playEle03(new Integer[] {1,2,3});
		for(Integer s:str02) {
			System.out.print(s+" ");
		}
	}
	//方法二:
	public <T> T[] playEle03(T[] arr) {
		int start=0;
		int end=arr.length-1;
		
		while(start<end) {
			T temp=arr[start];
			arr[start]=arr[end];
			arr[end]=temp;
			
			start++;
			end--;
		}
		
		return arr;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值