程序员内功— —数据结构与算法之数组(1)--增删改查

前言:

        工玉成其事必先利其器。在如此激烈程序员的竞争中,不进步就是落后。而一味的写增删改查往往会将自己堕入无可挽回的地步。很多人都知道程序员中年危机?中年危机说的只是只会增删改查,仅仅只停留在框架的使用层面,对一些必须要懂得却不懂。比如仅仅会增删改查,这种类型的很容易被人替代,如果自己的基础也就是内功扎实,别人无法随便替代你,试问,中年危机还会有吗?

                   小编将“内功”暂时分为3部分:数据结构与算法,多线程,网络!

  下面小编将和大家一起练气期入门

            java数据结构与算法之数组的增删改查:

package com.ern.demo;

/**
 * 
 * @author wen
 *
 */
public class MyArray {

	private static int[] a;

	public MyArray() {
		  // 4 8 9 0 5 3 6 2 1
		a = new int[10];
		a[0] = 4;
		a[1] = 8;
		a[2] = 9;
		a[3] = 0;
		a[4] = 5;
		a[5] = 3;
		a[6] = 6;
		a[7] = 2;
		a[8] = 1;
		a[9] = 7;

	}

	/**
	 * 向数组中插入数据
	 * 
	 * @param args
	 * @param value
	 * @param index
	 */
	public void insert(int[] args, int value, int index) {
		// 判断是否已经是最大了
		if (check(args, index)) {

			args[index] = value;

		}

	}

	/**
	 * 插入排序,原理:首先数组是有序的,没序的话先排序一下。
	 * (1)循环找到要插入的位置。(2)在找到的位置开始,每个数组的值后移一位。(3)将值插入即可
	 * 
	 * @param args
	 * @param value
	 */

	public void insertSort(int[] args, int value) {
		// 先排序
		ArraySort(args);
		// 定义一个临时变量,用于储存插入的位置
		int index = 0;
		// 循环找到,要插入的位置,并且记录一下
		for (int i = 0; i < args.length; i++) {
			if (args[i] >= value) {
				index = i;
				break;
			}
		}
		// 冲后面开始,将要插入位置后的值往后移动一位
		for (int j = args.length - 1; j > index; j--) {

			int temp = args[j];
			args[j] = args[j - 1];
			args[j - 1] = temp;
		}
		// 将要插入的值插入
		args[index] = value;

	}

	/**
	 * 判断是否已经是最大数位了
	 * 
	 * @param args
	 * @return
	 */

	public boolean check(int[] args, int index) {
		if (index > args.length || index < 0) {
			System.out.println("索引不正确");
			return false;
		}
		if (index + 1 >= args.length) {
			System.out.println("溢出了,不可以!");
			return false;
		}

		return true;
	}

	/**
	 * 输出所有数组中的值
	 * 
	 * @param args
	 */
	public void selectAll(int[] args) {
		for (int i = 0; i < args.length; i++) {
			System.out.print(args[i] + " ");

		}
	}

	
	/**
	 * 指定删除的数组中的值
	 * 
	 * @param args
	 * @param index
	 */
	public void deleteOne(int[] args, int index) {

		if (check(args, index)) {

			args[index] = 0;
		}

	}

	/**
	 * 删除数组中多个相同的值
	 * 
	 * @param args
	 * @param index
	 */
	public void deleteValue(int[] args, int value) {

		for (int i = 0; i < args.length; i++) {
			if (args[i] == value) {
				args[i] = 0;
			}
		}

	}

	/**
	 * 删除后会前移
	 * 
	 * @param args
	 * @param index
	 */
	public void deleteMove(int[] args, int index) {

		if (check(args, index)) {
			// 这
			if (index == args.length) {
				return;
			} else {

				for (int i = index; i < args.length - 1; i++) {

					args[i] = args[i + 1];
					args[i + 1] = 0;

				}

			}

		}

	}

	/**
	 * 更新数据
	 */
	public void update(int[] args, int value, int... index) {

		if (index.length <= 0) {
			System.out.println("输入的索引有问题");
			return;
		}
		for (int i = 0; i < index.length; i++) {

			args[index[i]] = value;

		}

	}

	/**
	 * 查找相关元素的索引,考虑到相同元素
	 * 
	 * @param args
	 * @param value
	 * @return
	 * @throws Exception
	 */
	public int[] select(int[] args, int value) throws Exception {
		/**
		 * 遍历寻找有多少个相同,记录起来!!
		 */
		int count = 0;

		for (int i = 0; i < args.length; i++) {
			if (args[i] == value) {
				count++;
			}
		}
		/**
		 * 如果没有这个元素,就抛个异常玩玩
		 */
		if (count == 0) {
			throw new Exception("没有找到相关元素");
		}
		/**
		 * 用来返回给他存在几个元素
		 */
		int[] f = new int[count];
		// 用于数组增加
		int flength = 0;

		/**
		 * 再此遍历,找到相关索引,将他放入临时数组中
		 */
		for (int i = 0; i < args.length; i++) {
			if (args[i] == value) {
				f[flength] = i;
				flength++;
			}
		}
		return f;

	}


}

        这一篇博文仅仅是入门理解一下就好,不要太在意那些检查之类的系列,小编没有认真的去做校验。数组的增删改查相对来说较为简单。接下来的博客,小编将和大家一起学习数组的二分查找以及数组的三种经典排序。上面的全是小编按照自己的想法写的,和真正的开发用途可能不太一样,仅供学习。


程序人生,与君共勉!

猜你喜欢

转载自blog.csdn.net/weixin_41622183/article/details/80492562