前言:
工玉成其事必先利其器。在如此激烈程序员的竞争中,不进步就是落后。而一味的写增删改查往往会将自己堕入无可挽回的地步。很多人都知道程序员中年危机?中年危机说的只是只会增删改查,仅仅只停留在框架的使用层面,对一些必须要懂得却不懂。比如仅仅会增删改查,这种类型的很容易被人替代,如果自己的基础也就是内功扎实,别人无法随便替代你,试问,中年危机还会有吗?
小编将“内功”暂时分为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;
}
}
这一篇博文仅仅是入门理解一下就好,不要太在意那些检查之类的系列,小编没有认真的去做校验。数组的增删改查相对来说较为简单。接下来的博客,小编将和大家一起学习数组的二分查找以及数组的三种经典排序。上面的全是小编按照自己的想法写的,和真正的开发用途可能不太一样,仅供学习。
程序人生,与君共勉!