zoukankan      html  css  js  c++  java
  • 模拟java.util.Collection一些简单的用法

    /*
    需求:模拟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("*******************************************************
    ArrayList中排好序的数据!");
    		
    		ArrayList<Person> arrT = new ArrayList<Person>(arr);
    		arrT.MaxToMinSort();
    		arrT.output();
        }
    }
    

      

  • 相关阅读:
    python(十二)面向对象编程、类
    如何搭建测试环境
    python(十一)接口开发、写日志、发邮件、python来发请求、手动添加环境变量
    python(十):模块相关、操作Redis、操作Excel
    Python(九):递归+内置函数+第三方模块+md5加密+操作mysql
    Python(八) 函数、模块
    python练习题
    Python(七) 元组+集合+随机+string
    Python(六)操作文件+非空即真
    VUE基础-1
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/3872828.html
Copyright © 2011-2022 走看看