标题: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;
}