• 仿照JAVA vector模型写一个SuperArray


    SuperArray功能,存储int型的数值,如果超过,则默认以当前空间二倍扩展,如果传入了增长参数,则增加传入的参数数值容量。


    SuperArray.java:

    package com.zmz.work;
    
    /**
     * 长度可变的数组(ctrl + s + f)
     * 
     * @author zmz
     *
     */
    public class SuperArray {
    
    	/**
    	 * 容量(容器的大小)
    	 */
    	private int capacity;
    
    	/**
    	 * 大小(元素的个数)
    	 */
    	private int size = 0;
    
    	/**
    	 * 数据
    	 */
    	private int[] data;
    
    	/**
    	 * 容量的增量(步长)默认为0
    	 */
    	private int increment = 0;
    
    	/**
    	 * 容量为 10 线性表
    	 */
    	public SuperArray() {
    		this(10);
    	}
    
    	/**
    	 * 创建指定大小的容器
    	 * 
    	 * @param capacity
    	 *            默认的容量
    	 */
    	public SuperArray(int capacity) {
    		this.capacity = capacity;
    		data = new int[capacity];
    	}
    
    	// 构造器模式
    	// public SuperArray(int increment) {
    	//
    	// }
    
    	/**
    	 * 创建变长数组
    	 * 
    	 * @param capacity
    	 *            容量
    	 * @param increment
    	 *            扩容的增长因子
    	 */
    	public SuperArray(int capacity, int increment) {
    		this(capacity);
    		this.increment = increment;
    	}
    
    	/**
    	 * 获得容器的大小(存储的元素的个数)
    	 * 
    	 * @return int 小于等于容量
    	 */
    	public int getSize() {
    		return size;
    	}
    
    	/**
    	 * 获得容器的容量
    	 * 
    	 * @return int 容器的容量
    	 */
    	public int getCapacity() {
    		return capacity;
    	}
    
    	/**
    	 * 往容器中(末尾)添加一个元素
    	 * 
    	 * @param n
    	 *            int 要存入容器的元素
    	 */
    	public void add(int n) {
    		// 检查容量与元素的数量
    		// 设计模式、重构、架构模式设计
    		increaseCapacity();
    		data[size++] = n;
    	}
    
    	/**
    	 * 在指定位置添加信息元素
    	 * 
    	 * @param index
    	 *            新元素的位置(索引、0为起点)
    	 * @param n
    	 *            添加的新元素
    	 */
    	public boolean add(int index, int n) {
    		if (index > size) {
    			return false;
    		}
    
    		data[index] = n;
    		return true;
    	}
    
    	/**
    	 * 获得指定位置的元素
    	 * 
    	 * @param index
    	 * @return
    	 */
    	public int get(int index) {
    		// TODO
    		return data[index];
    	}
    
    	/**
    	 * 删除特定位置的元素
    	 * 
    	 * @param index 位置
    	 * @return
    	 */
    	public int remove(int index) {
    		// TODO
    		return 0;
    	}
    
    	/**
    	 * 扩容
    	 */
    	private void increaseCapacity() {
    		if (size == capacity) {
    			// 扩容
    			if (increment == 0) {
    				capacity *= 2;
    			} else {
    				capacity += increment;
    			}
    			int[] newData = new int[capacity];
    			for (int i = 0; i < data.length; i++) {
    				newData[i] = data[i];
    			}
    			data = newData;
    			System.out.println("扩容为:" + capacity);
    		}
    	}
    	public void show() {
    		System.out.printf("
    容量:%d, 大小:%d
    ", capacity, size);
    		for (int i = 0; i < size; i++) {
    			System.out.print(data[i] + ",");
    		}
    	}
    
    }
    

    Test.java:

    package com.zmz.work;
    
    public class Test {
    
    	// alt + /
    	public static void main(String[] args) {
    		
    		SuperArray a1 = new SuperArray(15);
    		SuperArray a2 = new SuperArray(17);
    		SuperArray a3 = new SuperArray(10);
    		SuperArray a4 = new SuperArray(10,3);
    		for (int i = 0; i < 15; i++) {
    			a1.add(i);
    			a2.add(i);
    			a3.add(i);
    			a4.add(i);
    		}
    		
    		a1.show();
    		a2.show();
    		a3.show();
    		a4.show();
    	}
    }
    

    输出:

    扩容为:20
    扩容为:13
    扩容为:16


    容量:15, 大小:15
    0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,
    容量:17, 大小:15
    0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,
    容量:20, 大小:15
    0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,
    容量:16, 大小:15
    0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,

  • 相关阅读:
    Web开发常用知识点
    我的PHP之旅:开篇,走入开源的世界
    WPF Knowledge Points ContentControl和ContentPresenter的区别
    WPF Knowledge Points 控件状态利器:VisualStateManager详解
    WPF Control Hints ComboBox : 如何去掉ComboBox的DropDownButton
    WPF Control Hints ContextMenu : 怎么通过MenuItem的Click事件取得ContextMenuItem绑定的类实例?
    WPF Knowledge Points Binding.StringFormat不起作用的原理和解决
    AJAX请求 $.ajaxSetup方法的使用
    Html标签输出到前台并导出到Excel
    XML序列化和反序列化
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256607.html
Copyright © 2020-2023  润新知