zoukankan      html  css  js  c++  java
  • 通过数组实现类似于集合的功能(包含动态扩容、前平移、后平移、增删改查)

    package shuzu;
    /**
     * 通过数组实现类似于集合的功能
     * 包含功能有:
     *    
     *    动态添加元素
     *    在指定位置添加元素
     *    
     *    删除指定下标的元素
     *    删除指定内容的首个元素
     *    删除指定内容的所有元素
     *    
     *    修改指定下标的元素
     *    
     *    查询指定元素的下标
     * 
     */
    import java.util.Arrays;
    
    public class ArraysTest {
    	static int[] arr = new int[5];
    	static int num = 0;
    
    	public static void main(String[] args) {
    		add(1);
    		add(1);
    		add(2);
    		add(2);
    		add(3);
    		add(3);
    		System.out.println("扩容:      " + Arrays.toString(arr));
    		add(5, 5);
    		System.out.println("指定位置扩容:          " + Arrays.toString(arr));
    		delete(5);
    		System.out.println("删除指定位置后的数组为:      " + Arrays.toString(arr));
    		deleteContent(1);
    		System.out.println("删除指定内容的元素的数组为:        " + Arrays.toString(arr));
    		deleteContentAll(3);
    		System.out.println("删除指定内容的所有元素的数组为:        " + Arrays.toString(arr));
    		update(5, 10);
    		query(3);
    	}
    
    	// 添加元素
    	public static void add(int ele) {
    		if (num >= arr.length) {
    			arr = doArr();
    		}
    		arr[num] = ele;
    		num++;
    	}
    
    	// 在指定位置添加元素
    	public static void add(int index, int ele) {
    		if (index < arr.length) {
    			arr = doArr(index, ele);
    		} else {
    			System.out.println("数组越界!");
    		}
    	}
    
    	// 删除指定位置元素
    	public static void delete(int index) {
    		if (index < arr.length) {
    			doCut(index);
    		}
    	}
    
    	// 删除数组中首次出现的指定内容元素
    	public static void deleteContent(int ele) {
    		for (int i = 0; i < arr.length; i++) {
    			if (arr[i] == ele) {
    				doCut(i);
    				break;
    			}
    		}
    	}
    
    	// 删除指定内容的所有元素
    	public static void deleteContentAll(int ele) {
    		for (int i = 0; i < arr.length; i++) {
    			if (arr[i] == ele) {
    				doCut(i);
    				i = 0;
    			}
    		}
    	}
    
    	// 修改指定位置的元素内容
    	public static void update(int index, int ele) {
    		if (index < arr.length) {
    			arr[index] = ele;
    		} else {
    			System.out.println("数组越界!");
    		}
    	}
    
    	// 查询指定的元素内容的首次位置,并显示
    	public static void query(int ele) {
    		for (int i = 0; i < arr.length; i++) {
    			if (arr[i] == ele) {
    				System.out.println(ele + "所在的下标为" + i);
    				break;
    			}
    			if ((i == arr.length - 1) && (arr[i] != ele)) {
    				System.out.println(ele + "不在当前所在的数组");
    			}
    		}
    	}
    
    	// 数组扩容 动态扩容
    	public static int[] doArr() {
    		int[] arr_ = new int[arr.length + 1]; // arr.length * (3/2)+1 是怎么想的
    		arr_ = Arrays.copyOf(arr, arr_.length);
    		return arr_;
    	}
    
    	// 数组扩容 动态指定位置扩容
    	public static int[] doArr(int index, int ele) {
    		int[] arr_ = new int[arr.length + 1];
    		arr_ = Arrays.copyOf(arr, arr_.length);// 复制给新数组
    		for (int i = arr_.length - 1; i >= index; i--) {// 指定位置的元素后移
    			arr_[i] = arr_[i - 1];
    		}
    		arr_[index] = ele;
    		return arr_;
    	}
    
    	// 数组缩减 动态缩减
    	public static void doCut(int index) {
    		// 根据指定的序号进行响应的缩减 // 平移覆盖思想
    		for (int i = index; i < arr.length - 1; i++) {
    			arr[i] = arr[i + 1];
    		}
    		arr = Arrays.copyOf(arr, arr.length - 1);
    	}
    }
    

      

  • 相关阅读:
    索引与搜索框架Lucene
    AutoResetEvent和ManualResetEvent的理解
    hadoop mapreduce 过程详解
    使用Visual Studio进行代码度量
    MethodImplAttribute 类和 SynchronizationAttribute 类
    开发定时服务应用
    DispatcherTimer与Dispatcher小小应用
    WCF问题
    玩转博客园的心路总结
    工作中碰到的一些东西【弹出窗口】【拖放】【异步文件上传】
  • 原文地址:https://www.cnblogs.com/1020182600HENG/p/6555553.html
Copyright © 2011-2022 走看看