/*
需求:模拟java.util.Collection一些简单的用法!注意:java虚拟机中并没有泛型类型的对象。泛型是通过编译器执行一个被称为类型擦除的前段转换来实现的。
1)用泛型的原生类型替代泛型。
原生类型是泛型中去掉尖括号及其中的类型参数的类或接口。泛型中所有对类型变量的引用都替换为类型变量的最近上限类型,
如对于Cage<T extends Animal>, T的引用将用Animal替换,而对于Cage<T>, T 的引用将用Object替换。2)
*/
interface Collection<T>{public abstract void add(T o);public abstract Object getElement(int index);public abstract void setElement(int index, T o);public abstract Object[] toArray();public abstract boolean isNext();public abstract Object nextElemenst();
}class Array<T> implements Collection<T>{int buildNum = 10;int maxSize = 10;int size = 0;int flag = 0;int xIndex;Object[] elementsData = new Object[maxSize];/*判断时候数组大小不够*/public void isFullSize(){if(maxSize == size){Object[] tmp = new Object[maxSize += buildNum];for(int i=0; i<size; ++i)tmp[i] = elementsData[i];elementsData = tmp;}}//添加元素public void add(T o){isFullSize();elementsData[size++] = o;}//得到某一个下标的元素public Object getElement(int index){if(index < size){System.out.println(elementsData[index].getClass().getName());return elementsData[index];}else return null;}//获取某一个元素的下标public int getIndex(T o){for(int i=0; i<size; ++i)if(o.equals(elementsData[i]))return i;return -1;}//设置某个元素为一新值public void setElement(int index, T o){if(index < size)elementsData[index] = o;}//放回对象数组public Object[] toArray(){return elementsData;}//是否有下一个元素public boolean isNext(){if(flag == 0){flag =1;xIndex=0;}if(xIndex == size){flag = 0;return false;}return true;}//返回下一个元素public Object nextElemenst(){return elementsData[xIndex++];}public static void qsort(Object arr[], int from, int to){//@SuppressWarnings("unchecked")if(from >= to) return;int mid = (from+to)/2;Object pivotkey = arr[from];if(arr[from] instanceof Comparable){System.out.println("dfsdfsdf");Comparable pp = (Comparable)arr[from];}if( ((Comparable)arr[mid]).compareTo(arr[from]) * ((Comparable)arr[mid]).compareTo(arr[to])<0){arr[from] = arr[mid];arr[mid] = pivotkey; }else if( ((Comparable<Object>)arr[to]).compareTo(arr[from]) * ((Comparable<Object>)arr[to]).compareTo(arr[mid])<0){arr[from] = arr[to];arr[to] = pivotkey;}pivotkey = arr[from];int low = from, high = to;while(low < high){while(low < high && ((Comparable<Object>)arr[low]).compareTo(pivotkey)>0) ++low;while(low < high && ((Comparable<Object>)arr[high]).compareTo(pivotkey)<0) --high;if(low < high){Object tmp = arr[low];arr[low] = arr[high];arr[high] = tmp;}}arr[low] = pivotkey;qsort(arr, from, low-1);qsort(arr, low+1, to);}
}class Person implements Comparable<Person>{String name;int age;Person(){name = "";age = 0;}Person(String name, int age){this.name = name;this.age = age;}public String toString(){return name + "...." + age;}public boolean equals(Object o){Person x = (Person)o; return name.equals(x.name) && age==x.age;}public int compareTo(Person o){if(name.compareTo(o.name)==0)return age - o.age;return name.compareTo(o.name);}
}class ArrayList<T>{Object elementsData[] = null;int size = 0;ArrayList(Collection<T> x){elementsData = x.toArray();for(int i=0; i<elementsData.length; ++i){if(elementsData[i]==null)break;++size;//不计入空引用}}public void MaxToMinSort(){//从大到小排序Array.qsort(elementsData, 0, size-1);}public void output(){for(int i=0; i<size; ++i)System.out.println(elementsData[i]);}
}
public class Test{public static void main(String[] args){Array<Person>arr = new Array<Person>();for(int i=0; i<15; ++i)arr.add(new Person("h" + i + 1, i+1));System.out.println("Array 中的数据。。。。。");while(arr.isNext()){System.out.println( ((Person)arr.nextElemenst()) );}System.out.println(arr.getIndex(new Person("h101", 11)));System.out.println(arr.getElement(5));System.out.println("*******************************************************\nArrayList中排好序的数据!");ArrayList<Person> arrT = new ArrayList<Person>(arr);arrT.MaxToMinSort();arrT.output();}
}