模拟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("*******************************************************\nArrayList中排好序的数据!");

		ArrayList<Person> arrT = new ArrayList<Person>(arr);
		arrT.MaxToMinSort();
		arrT.output();
    }
}

  

模拟java.util.Collection一些简单的用法

时间: 2024-10-19 03:22:49

模拟java.util.Collection一些简单的用法的相关文章

源码(03) -- java.util.Collection&lt;E&gt;

 java.util.Collection<E> 源码分析 --------------------------------------------------------------------------------- java.util.Collection<E>是一个接口,它的定义如下: 1 public interface Collection<E> extends Iterable<E> { 2 // Query Operations 3 //

java源码(4) -- java.util.Collection

我也不知道看源码有什么用,就是想去看看... java.util.Collection 这是一个接口,是java中集合框架的根接口. 下面来具体看看该接口中定义了哪些方法 public interface Collection<E> extends Iterable<E>{ //操作集合元素的方法 boolean add(E e);//将元素E添加到该集合中 boolean addAll(Collection<? extends E> c);//将集合c添加到该集合中

java----数据结构与算法----JavaAPI:java.util.Collection接口

Java API--java.util.Collection接口 /** * @author chen * @date 20170317 * @description:本程序讲述Collection接口 * java.util.Collection * 概述:Collection接口是Set和List接口的父接口,Collection接口中定义了一些 * 用于集合元素操作的方法,被其子接口以及子接口的实现类所继承 * 构造函数 * java中接口不能有构造函数 * 成员函数: * [1]概述,由

java.util.Collection List与其子类 Set与其子类

package com.Collection; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Study01 { public static void main(String[] args){ Collection<String> c=new ArrayList<String>(); Collection<String> c

【java】java.util.regex.Pattern和java.util.regex.Matcher简单示例

1 package 正则; 2 3 import java.util.regex.Matcher; 4 import java.util.regex.Pattern; 5 6 public class Test_regex { 7 public static void main(String[] args) { 8 String str="a1b22c333d4444e_55_555f666666g7777777"; 9 String regex="\\w*"; 1

java.util.concurrent.CountDownLatch类基本用法

java.util.concurrent.CountDownLatch类是一个同步计数器,构造时传入int参数,该参数就是计数器的初始值,每调用一次countDown()方法,计数器减1,计数器大于0 时,await()方法会阻塞程序继续执行. 1.构造方法参数指定了计数的次数 2.countDown方法,当前线程调用此方法,则计数减一 3.awaint方法,调用此方法会一直阻塞当前线程,直到计时器的值为0 package cn.baokx; import java.util.Random; i

Java.util.Calendar类简单介绍

Java.util.Calendar类 Calendar类是一个抽象类,里面提供了很多操作日历的方法.Calendar类无法直接创建对象使用,需要利用里面的一个静态方法getInstance(),该方法返回一个Calendar对象(子类对象).该静态方法使用默认时区和语言环境获取一个日历.这个静态方法是必须知道的否则根本玩不转Calendar. 1.Calendar类中的常量 Calendar cal = Calendar.getInstance(); cal.get(Calendar.DATE

java.util (Collection接口和Map接口)

1:Collection和Map接口的几个主要继承和实现类                  1.1  Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素而另一些不行.一些能排序而另一些不行.Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的"子接口"如List和Set. 如

简单组合java.util.Map&lt;K,V&gt;实现Map&lt;K,P,V&gt;

java.util.Map<K,V>为单键对单值,有时需要双键对单值,因此基于Map<K,V>可以简单实现一个Map<K,P,V>. 接口定义:下载 Java代码 package cc.lixiaohui.demo.javassist.proxy.util; import java.util.Collection; import java.util.Set; /** * 两个键的复合map * <pre> * key------+ *          |-