Java中的数据结构(一):PCollection接口定义、PArrayList的实现
来源:互联网 发布:网络大电影名词解释 编辑:程序博客网 时间:2024/04/24 09:47
为了系统的完成后面的数据结构学习,这里首先参考JDK源码定义了Collection等接口,并在抽象类种提供一些骨架方法,方便后面具体实现类的编写,当然这些灵感都是来自JDK源码,先学习搬运然后再学习创造。
1.顶层接口的定义
1.1 PCollection
public interface PCollection<E> extends PIterable<E> { public abstract int size(); public abstract boolean isEmpty(); public abstract boolean contains(Object o); public abstract PIterator<E> iterator(); public abstract Object[] toArray(); public abstract <T> T[] toArray(T[] arrayOfT); public abstract boolean add(E e); public abstract boolean remove(Object o); public abstract boolean containsAll(PCollection<?> collection); public abstract boolean addAll(PCollection<? extends E> collection); public abstract boolean removeAll(PCollection<?> collection); public abstract boolean retainAll(PCollection<?> collection); public abstract void clear(); public abstract boolean equals(Object o); public abstract int hashCode();}
1.2PAbstractCollection抽象类种提供一些骨架方法
public abstract class PAbstractCollection<E> implements PCollection<E> { private static final int MAX_ARRAY_SIZE = 2147483639; public abstract PIterator<E> iterator(); public abstract int size(); public boolean isEmpty() { return (size() == 0); } public boolean contains(Object paramObject) { return false; } public Object[] toArray() { return null; } public <T> T[] toArray(T[] arrayOfT) { return null; } public boolean add(E e) { return false; } public boolean remove(Object o) { return false; } public boolean containsAll(PCollection<?> paramCollection) { return false; } public boolean addAll(PCollection<? extends E> paramCollection) { return false; } public boolean removeAll(PCollection<?> paramCollection) { return false; } public boolean retainAll(PCollection<?> paramCollection) { return false; } public void clear() { }}
2. PArrayList 的实现
2.1定义好了最顶层的Collection接口,我们第一篇就来实现一个比较简单的PArrayList
同样的本着面向接口编程的原则,我们首先定义PList接口,从而规定PList的实现类提供的基础功能。
public interface PList<E> extends PCollection<E> { //collection 公有方法 public abstract int size(); public abstract boolean isEmpty(); public abstract boolean contains(Object O); public abstract PIterator<E> iterator(); public abstract Object[] toArray(); public abstract <T> T[] toArray(T[] arrayOfT); public abstract boolean add(E paramE); public abstract boolean remove(Object o); public abstract boolean containsAll(PCollection<?> collection); public abstract boolean addAll(PCollection<? extends E> collection); public abstract boolean addAll(int paramInt, PCollection<? extends E> collection); public abstract boolean removeAll(PCollection<?> collection); public abstract boolean retainAll(PCollection<?> collection); public abstract void clear(); public abstract boolean equals(Object o); public abstract int hashCode(); //list 特有方法 public abstract E get(int index); public abstract E set(int index, E e); public abstract void add(int index, E e); public abstract E remove(int index); public abstract int indexOf(Object o); public abstract int lastIndexOf(Object o); public abstract PListIterator<E> listIterator(); public abstract PListIterator<E> listIterator(int paramInt); public abstract PList<E> subList(int from, int to);}
2.2 PAbstractList提供骨架方法实现
public abstract class PAbstractList <E> extends PAbstractCollection<E> implements PList<E> { protected transient int modCount = 0; @Override public boolean containsAll(PCollection<?> collection) { return false; } @Override public boolean addAll(PCollection<? extends E> collection) { return false; } @Override public boolean addAll(int index, PCollection<? extends E> collection) { return false; } @Override public boolean removeAll(PCollection<?> collection) { return false; } @Override public boolean retainAll(PCollection<?>collection) { return false; } @Override public E get(int index) { return null; } @Override public E set(int index, E e) { return null; } @Override public void add(int index, E e) { } @Override public E remove(int paramInt) { return null; } @Override public int indexOf(Object paramObject) { return 0; } @Override public int lastIndexOf(Object paramObject) { return 0; } @Override public PListIterator<E> listIterator() { return null; } @Override public PListIterator<E> listIterator(int paramInt) { return null; } @Override public PList<E> subList(int paramInt1, int paramInt2) { return null; } @Override public PIterator<E> iterator() { return null; } @Override public int size() { return 0; }}
2.3 PArrList
public class PArrayList<T> extends PAbstractList<T> implements PList<T>{ private static final int Inital_Size =10; private int size; private int eleCount; private float growFactor =0.5F; private Object[] array; public PArrayList() { this.array = new Object[Inital_Size]; this.size = this.array.length; } public PArrayList( int size) { this.size = size; this.array = new Object[size]; } public PArrayList( int size, float growFactor) { this.size = size; this.growFactor = growFactor; this.array = new Object[size]; } @Override public boolean add(Object t) {//添加一个元素 if(capacityIsEnough()){ eleCount+=1; this.array[eleCount-1]= t; return true; }else{ growUp(); add(t); } return false; } @Override public boolean remove(Object t) { // 移除一个元素 if (eleCount <= 0 || size <= 0 ) { return false; } int index = indexOf(t); if (index<0) {//不存在 return false; }else{ removeByIndex(index); eleCount-=1; return true; } } @Override public int size() { return eleCount; } @Override public T get(int index) { //根据坐标获取 T t = (T) this.array[index]; return t; } @Override public T remove(int index) { //对外暴露的根据坐标移除 T t = get( index); removeByIndex(index); eleCount--; return t; } private boolean capacityIsEnough(){ //是否需要扩容 if (eleCount<this.array.length) { return true; } return false; } private void growUp(){ //扩容执行函数 int newSize= Math.round(this.size*(1+growFactor)); Object[] newArrya = new Object[newSize]; int i=0; for (Object object : this.array) { newArrya[i++] = object; } } public int indexOf(Object t){ // 获取对象的坐标 int index = -1; if (t==null) { int i = 0; for (Object object : array) { i++; if (object == null) { if (i <0 || i >eleCount) return -1; return i; } } }else{ int i = 0; for (Object object : array) { if (t.equals(object)) { if (i <0 || i >eleCount) return -1; return i; } i++; } } return index ; } int removeByIndex(int index){ //根据坐标移除 if (index == eleCount-1) {//最后一个元素 array[index]=null; } System.arraycopy(array, index+1, array,index , eleCount-index);//-1 return 1; }}
2.4 测试评估
public class TestPArrayList { public static void main(String[] args) { PList<User> list = new PArrayList<User>(); User user1 = new User(1); list.add(user1); list.add(new User(2)); list.add(new User(3)); list.add(new User(4)); list.add(new User(5)); list.add(new User(6)); User user7 = new User(7); list.add(user7); System.out.println("removed user:: "+list.remove(0)); list.remove(user7); for (int i =0;i<list.size() ; i++) { System.out.println(list.get(i).toString()); } System.out.println("size: "+list.size()); }}
测试结果
removed user:: User [id=1, name=null, age=0, money=0.0, gender=0]User [id=2, name=null, age=0, money=0.0, gender=0]User [id=3, name=null, age=0, money=0.0, gender=0]User [id=4, name=null, age=0, money=0.0, gender=0]User [id=5, name=null, age=0, money=0.0, gender=0]User [id=6, name=null, age=0, money=0.0, gender=0]size: 5
0 0
- Java中的数据结构(一):PCollection接口定义、PArrayList的实现
- Java中的接口定义、实现与应用
- Java(接口定义,接口实现)
- java中接口的定义与实现
- java中接口的定义与实现
- java中接口的定义与实现
- java中接口的定义与实现
- java中接口的定义与实现 .
- java中接口的定义与实现
- java中接口的定义与实现
- java接口的定义与实现
- java中接口的定义与实现
- java中接口的定义与实现
- java中接口的定义与实现
- java中接口的定义与实现
- java中接口的定义与实现
- java中接口的定义与实现
- java中接口的定义与实现
- Linux下的tar压缩解压缩命令详解
- 通过公网IP访问云上的Hadoop集群
- java集合中对象某属性比较排序
- NS3 使用eclipse编辑器
- POJ 2342 Anniversary party(树状DP)
- Java中的数据结构(一):PCollection接口定义、PArrayList的实现
- 解决 button 的背景图片被拉伸
- 微信小程序 简单动画入门
- Java分布式应用如何入门以及有哪些资料?
- 【实训记录】山东大学场馆管理系统实训笔记之——数据库设计
- Linux中基于hadoop安装hive(CentOS7+hadoop2.8.0+hive2.1.1)
- 双目标定log文件
- idea2017创建maven web项目
- Swagger-Codegen的简单使用