看《java开发实战经典》这本书,泛型那章的习题:
按照要求定义一个操作类:要求完成一个一维数组操作类,其中可以加入任意类型的数据,数组具体的操作类型由程序外部决定,并且可以实现查询功能。刚开始学编程,有点头大,哪位能指点指点,多谢多谢!
按照要求定义一个操作类:要求完成一个一维数组操作类,其中可以加入任意类型的数据,数组具体的操作类型由程序外部决定,并且可以实现查询功能。刚开始学编程,有点头大,哪位能指点指点,多谢多谢!
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");
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));
}
}
}
if (ts == null || ts.length == 0) {
return;
}
for (T t : ts) {
System.out.println(t);
}
}}
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数组的查找不成功?是哪里不对了?
if(array[i]==key){
flag=true;
temp=i;
}
改成if(array[i].equals(key)){
flag=true;
temp=i;
}
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));
}
}
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]);
}
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);
}
这一句提示:未经检查的强制类型转换,这个应该怎么处理,程序可以运行,结果也对,就是看着这个提示不是很爽啊。
public MyArray(int size) {