- /**
- * 定义一个类,模拟实现ArrayList 。
- * @author hasee
- *
- */
- public class SxtArrayList {
-
- private Object[] elementData; // 定义一个Object数组来表能接受任何类型的数据
-
- private int size; // 表示容器有个元素
-
- /**
- * 默认无参数构造器,默认容器的大小为10
- */
- public SxtArrayList(){
- this(10);
- }
- /**
- * 有参数构造器
- * @param initialCapacity
- */
- public SxtArrayList(int initialCapacity){
- /**
- * 判断 如果initialCapacity < 0 抛出异常
- */
- if(initialCapacity < 0){
- try {
- throw new Exception();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- elementData = new Object[initialCapacity];
- }
-
- public int size(){
- return size;
- }
- /**
- * 容器是否为空,
- * @return
- */
- public boolean isEmpty(){
- return size == 0;
- }
- /**
- * 往容器添加一个元素 并实现了自动扩展工作,
- * @param obj
- */
- public void add(Object obj){
- ensureCapacity();
- elementData[size++] = obj;
- }
- /**
- * 按指定的索引获得元素对象
- * @param index
- */
- public Object get(int index){
- rangeCheck(index);
- return elementData[index];
- }
-
- /**
- * 按照指定的索引删除元素对象
- * @param index
- */
- public void remove(int index){
- rangeCheck(index);
- int numMoved = size - index - 1;
- if(numMoved > 0){
- System.arraycopy(elementData, index+1, elementData, index, numMoved);
- }
- elementData[--size] = null;
- }
- /**
- * 索引检测
- * @param obj
- */
- private void rangeCheck(Object obj){
- for(int i=0;i<size;i++){
- if(obj.equals(elementData[i])){
- remove(i);
- }
- }
- }
- /**
- * 按照指定的缩影替换一个元素对象
- * @param index
- * @param obj
- * @return
- */
- public Object set(int index,Object obj){
- rangeCheck(index);
- Object oldValue = elementData[index];
- elementData[index] = obj;
- return oldValue;
- }
- /**
- * 按照指定的索引插入一个元素对象
- * @param index
- * @param obj
- */
- public void add(int index,Object obj){
- rangeCheck(index);
- ensureCapacity();
- System.arraycopy(elementData, index,elementData, index+1,size-index);
- elementData[index] = obj;
- }
- /**
- * 数组的扩容
- */
- private void ensureCapacity(){
- if(size == elementData.length){
- Object[] newArrayList = new Object[size*2+1];
- //调用数组的方法实现拷贝
- System.arraycopy(elementData, 0, newArrayList, 0, elementData.length);
- // for(int i=0;i < elementData.length;i++){
- // newArrayList[i] = elementData[i];
- // }
- elementData = newArrayList;
- }
- }
- }
复制代码
|
|