zoukankan      html  css  js  c++  java
  • Java superArray2

    还是那个仿照Vector数组,完善了一些功能,但是输出格式感觉。。。。昂

    package com.zmz.work;
    
    /**
     * 长度可变的数组
     * 
     * @author zmz
     *
     */
    public class SuperArray {
    
    	/**
    	 * 容量(容器的大小)
    	 */
    	private int capacity;
    
    	/**
    	 * 大小(元素的个数)
    	 */
    	private int size = 0;
    
    	/**
    	 * 数据
    	 */
    	private double[] data;
    
    	/**
    	 * 容量的增量(步长)默认为0
    	 */
    	private int increment = 0;
    
    	/**
    	 * 容量为 8 线性表
    	 */
    	public SuperArray() {
    		this(8);
    	}
    
    	/**
    	 * 创建指定大小的容器
    	 * 
    	 * @param capacity
    	 *            默认的容量
    	 */
    	public SuperArray(int capacity) {
    		this.capacity = capacity;
    		data = new double[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(double e) {
    		// 检查容量与元素的数量
    		// 设计模式、重构、架构模式设计
    		increaseCapacity();
    		data[size++] = e;
    	}
    
    	/**
    	 * 在指定位置添加信息元素
    	 * 
    	 * @param index
    	 *            新元素的位置(索引、0为起点)
    	 * @param n
    	 *            添加的新元素
    	 */
    	public boolean add(int index, double e) {
    		if (index > size) {
    			return false;
    		}
    		size++;
    		increaseCapacity();
    		double[] newData4 = new double[capacity];
    		for(int i = 0; i < index; i++) {
    			newData4[i] = data[i];
    		}
    		newData4[index] = e;
    		for(int i = index; i < data.length-1; i++) {
    			newData4[i+1] = data[i];
    		}
    		data = newData4;
    		return true;
    	}
    
    	/**
    	 * 获得指定位置的元素
    	 * 
    	 * @param index
    	 * @return
    	 */
    	public double get(int index) {
    		// TODO
    		return data[index];
    	}
    
    	/**
    	 * 删除特定位置的元素
    	 * 
    	 * @param index 位置
    	 * @return
    	 */
    	public double remove(int index) {
    		// TODO
    		double[] newData2 = new double[capacity];
    		double getRemove = data[index];
    		for(int i = 0; i < index; i++) {
    			newData2[i] = data[i];
    		}
    		for(int i = index; i < data.length-1; i++) {
    			newData2[i] = data[i+1];
    		}
    		data =newData2;
    		System.out.printf("删除成功,删除的元素位置是%d(下标从0开始),值是%f
    ",index,getRemove);
    		return getRemove;		
    	}
    	
    	/**
    	 * 删除从索引位置开始的 n 个元素
    	 * @param index 位置 
    	 * 		  n 元素个数
    	 *  void
    	 */
    	void remove(int index,int n) {
    		double[] newData3 = new double[capacity];
    		for(int i = 0; i < index-1; i++) {
    			newData3[i] = data[i];
    	}
    		for(int i = index; i < data.length-n; i++) {
    			newData3[i] = data[i+n];
    	}
    		data = newData3;
    		System.out.println();
    		System.out.println("删除n个元素成功");
    	}
    	
    	/**
    	 * 扩容
    	 */
    	private void increaseCapacity() {
    		if (size == capacity) {
    			// 扩容
    			if (increment == 0) {
    				capacity *= 2;
    			} else {
    				capacity += increment;
    			}
    			double[] newData = new double[capacity];
    			for (int i = 0; i < data.length; i++) {
    				newData[i] = data[i];
    			}
    			data = newData;
    			System.out.println();
    			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] + ",");
    		}
    		System.out.println();
    	}
    
    }
    


    package com.zmz.work;
    
    public class Test {
    
    	// alt + /
    	public static void main(String[] args) {
    		
    		//test1
    		SuperArray a1 = new SuperArray();
    		for(int i = 0; i < 5; i++) {
    			a1.add(i);
    			
    		}
    		a1.show();
    		a1.add(2, 100.0);
    		a1.show();
    		
    		//test2
    		SuperArray a2 = new SuperArray(10,5);
    		for (int i = 0; i < 12; i++) {
    			a2.add(i);	
    		}
    		a2.remove(5);
    		a2.show();
    		a2.remove(1,2);
    		a2.show();
    				
    	}
    }
    


    输出:

    容量:8, 大小:5
    0.0,1.0,2.0,3.0,4.0,
    
    容量:8, 大小:6
    0.0,1.0,100.0,2.0,3.0,4.0,
    
    扩容为:15
    删除成功,删除的元素位置是5(下标从0开始),值是5.000000
    
    容量:15, 大小:12
    0.0,1.0,2.0,3.0,4.0,6.0,7.0,8.0,9.0,10.0,11.0,0.0,
    
    删除n个元素成功
    
    容量:15, 大小:12
    0.0,3.0,4.0,6.0,7.0,8.0,9.0,10.0,11.0,0.0,0.0,0.0,


  • 相关阅读:
    CSS 按类查看的常用样式属性
    html5前端准备资料
    编译和链接一些错误和警告
    [转]assert()函数用法总结
    [转]C++ 函数模板特化导致的多重定义链接错误
    [转]退出线程的几种方法
    [总结]编程中遇到的vc提示的一些警告
    [转]__declspec(dllexport) 和 __declspec(dllimport)
    [转]PROCESS_INFOMATION
    [转载] STARTUPINFO结构体
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256602.html
Copyright © 2011-2022 走看看