模拟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一些简单的用法的更多相关文章
- 源码(03) -- java.util.Collection<E>
java.util.Collection<E> 源码分析(JDK1.7) -------------------------------------------------------- ...
- java.util.Collection源码分析和深度讲解
写在开头 java.util.Collection 作为Java开发最常用的接口之一,我们经常使用,今天我带大家一起研究一下Collection接口,希望对大家以后的编程以及系统设计能有所帮助,本文所 ...
- JDK源码(1.7) -- java.util.Collection<E>
java.util.Collection<E> 源码分析(JDK1.7) -------------------------------------------------------- ...
- java.util.Collection List与其子类 Set与其子类
package com.Collection; import java.util.ArrayList; import java.util.Collection; import java.util.It ...
- 【java】java.util.regex.Pattern和java.util.regex.Matcher简单示例
package 正则; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test_regex ...
- java.util.HashMap的简单介绍
1. java.util.HashMap的底层实现是数组+链表. 2. 简介put(key, value)方法的执行过程: 1)通过key值,使用散列算法计算出来一个hash值,用来确定该元素需要存储 ...
- java.util (Collection接口和Map接口)
1:Collection和Map接口的几个主要继承和实现类 1.1 Collection接口 Collection是最基本的集合接口,一个Collection代表一 ...
- < java.util >-- Collection接口
Collection: |--List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引.元素可以重复. |--Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素.必须 ...
- java.util.Queue用法
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头.队列中没有元素时,称为空队列. 在队列这 ...
随机推荐
- Oozie命令行常用命令汇总[转]
Oozie命令行常用命令汇总 有时候脚本跑多了就不愿意在OozieWeb端去看脚本的运行情况了.还好Oozie提供了很多命令行命令.能通过命令行直接检索自己想看到的脚本信息.在这里简单进行一下总结.一 ...
- [RabbitMQ+Python入门经典] 兔子和兔子窝
原文联接: http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/ RabbitMQ作为一个工业级的消息队列服务器,在其客户端手册列表的P ...
- Redis主从复制深入剖析
Redis是一个开源的,遵守BSD许可协议的key/value缓存系统,并由其高效的响应速度以及丰富的数据结构而闻名.Redis在京东的使用也是非常普遍的,包括很多关键业务上的 使用,由于Redis官 ...
- MongoDB分片之数据分割方式
随着移动互联网的发展,大量的非结构化数据随之产生,不仅对数据库存储大数据提出了新的要求,同时对于查询数据和进行大数据分析也提出了苛刻的要求,这些显然是单服务器处理能力无法满足的,自然建立一个集群是不可 ...
- 循序渐进做项目系列(1):最简单的C/S程序——让服务器来做加法
(本文是专门针对未接触过C/S开发的初学者而写的,C/S开发高手请自动忽略啊~~) 还在写“Hello world!”式的单机程序吗?还在各种拖控件吗?是否自己都觉得有点low呢?来个质的飞跃吧!看看 ...
- java提高篇(二三)-----HashMap
HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在.在HashMap中,key-value总是会当做一个整体来处理,系统会根据 ...
- Windows Azure Virtual Machine (25) 使用SSH登录Azure Linux虚拟机
<Windows Azure Platform 系列文章目录> 本文介绍内容适合于Azure Global和Azure China 为什么使用SSH登录Azure Linux虚拟机? 我们 ...
- UWP入门教程1——UWP的前世今生
目录 引言 设备族群 UI 和通用输入模式 通用控件和布局面板 工具 自适应扩展 通用输入处理 引言 在本篇文章中,可以掌握以下知识: 设备族群,如何决定目标设备 新的UI控件和新面板帮助你适应不同的 ...
- osgi 2
基础的API BundleActivator BundleContext ServiceReference HelloServiceFactory ServiceTracker osgi 疑惑: I ...
- windows批处理总结
rem echo off 表示之后所有命令行不显示,但命令结果总是会显示的!! 不存在%ROOT_DIR% . %CUR_DIR%的变量 rem @表示命令行不显示当前行,但命令结果总是会显示的!! ...