java数组算法例题代码详解(冒泡排序,选择排序,找最大值、最小值,添加、删除元素等)

数组算法例题

1.数组逆序

第一个和最后一个互换,第二个和倒数第二个互换,就相当于把数组想下图一样,进行对折互换,如果数组个数为奇数,则中间保持不变其余元素互换即可

import java.util.Arrays;

class Demo12 {
    public static void main (String[] args) {
        int[] arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        System.out.println(Arrays.toString(arr));
        reverse(arr);
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 数组逆序
     * @param arr
     */
    public static void reverse(int[] arr) {
        for (int i = 0; i < arr.length / 2; i++) {
            int temp = arr[arr.length - 1 - i];
            arr[arr.length - 1 - i] = arr[i];
            arr[i] = temp;
        }
    }
}

数组展示:System.out.println(Arrays.toString(arr));

2.找出数组中最大值所在下标位置

因为是找下标位置所以可以先定义一个值为数组下标,直接使用 数组[下标] 方式进行比较

import java.util.Arrays;

class Demo13 {
    public static void main (String[] args) {
        int[] array = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        // 输出数组
        System.out.println(Arrays.toString(array));
        maxIndexOf(array);
    }

    /**
     * 找到数组中最大的数并且输出
     * @param arr
     */
    public static void maxIndexOf (int[] arr) {
        int maxIndex = 0;
        // i 可以从1开始,不需要maxIndex和自己再比较一次
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > arr[maxIndex]){
                maxIndex = i;
            }
        }
        System.out.printf("最大的数为 : %d 下标为 : %d", arr[maxIndex] , maxIndex);
    }
}

3.找出数组中指定元素第一次出现的下标位置

分析

  • 第一次出现位置
  • 如果有多个重复元素
  • 有可能不存在指定元素
import java.util.Arrays;
import java.util.Scanner;

class Demo14 {
    public static void main (String[] args) {
        int num = 0;
        int index = 0;
        // 定义数组
        int[] array = { 4399, 327, 360, 3, 4, 11, 32, 45, 123, 86};
        // 输出数组
        System.out.println(Arrays.toString(array));
        // 获取用户输入数据
        num = getInputNum();
        // 获取用户输入数据在数组中第一次出现的位置
        index = getIndexOfNum(array, num);
        // 输出位置索引
        printIndexNum(num, index);
    }

    /**
     * 接受用户传来的数据
     * @return 返回接受的数据
     */
    public static int getInputNum () {
        int num = 0;
        java.util.Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要查询的数据:");
        num = sc.nextInt();
        return num;
    }

    /**
     * 找出数组中指定元素第一次出现的下标位置
     * @param array
     * @return 返回下标
     */
    public static int getIndexOfNum(int[] array, int num) {
        // 如果找不到数据,则默认是-1
        int index = -1;
        for (int i = 0; i < array.length; i++) {
            if (array[i] == num) {
                index = i;
                break;
            }
        }
        return index;
    }

    /**
     * 输出数据
     * @param num 数组中某一项的值
     * @param indexNum 索引值
     */
    public static void printIndexNum(int num, int indexNum) {
        if (indexNum == -1) {
            System.out.println(num + "不在数组中");
        } else {
            System.out.println("数组中" + num + "第一次出现的下标位置 : " + indexNum);
        }
    }
}

4.在数组中找出指定下标对应的元素

分析:有可能不存在指定的索引

import java.util.Arrays;
import java.util.Scanner;

class Demo15 {
    public static void main(String[] args) {
        // 下标值
        int indexNum = 0;
        // 下标对应的数值
        int num = 0;
        // 定义数组
        int[] array = { 4399, 327, 360, 3, 4, 11, 32, 45, 123, 86};
        // 输出数组
        System.out.println(Arrays.toString(array));
        // 接受用户传来的下标值
        indexNum = getIndexNum();
        // 查询数组中下标值对应的数值
        num = findNumInArray(indexNum, array);
        // 输出数值
        printNum(indexNum, num);
    }

    /**
     * 接受用户传来的下标值
     * @param indexNum 用户传来的下标值
     * @return 下标值
     */
    public static int getIndexNum() {
        int indexNum = 0;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入想要查询的下标值:");
        indexNum = sc.nextInt();
        return indexNum;
    }

    /**
     * 查询数组中下标值对应的数值
     * @param indexNum 下标值
     * @param array 数组
     * @return 返回下标值对应的数值
     */
    public static int findNumInArray(int indexNum, int[] array) {
        int num = 0;
        // 判断用户传来的下标值是否正确,是否越界
        if (indexNum > 0 && indexNum < array.length) {
            num = array[indexNum];
        } else {
            // 如果越界num值为-1
            num = -1;
        }
        return num;
    }

    /**
     * 输出数值
     * @param num
     */
    public static void printNum(int indexNum, int num) {
        if (num == -1) {
            System.out.println(indexNum + "索引越界");
            System.exit(0);
        } else {
            System.out.println("数组中" + indexNum + "位置的元素为 : " + num);
        }
    }
}

5.找出指定元素在数组中最后一次出现位置

和找出第一个方法差不多

tips:

  • 既然是找最后一个数字,可以倒序查找,提高效率
  • 判断找不到的情况
package cn.ocean888;

import java.util.Arrays;
import java.util.Scanner;

// 找出指定元素在数组中最后一次出现位置

public class Demo1 {
	public static void main(String[] args) {
		int num = 0;
		int index = 0;
		int[] array = { 4399, 327, 360, 3, 4, 11, 32, 45, 123, 86};
		System.out.print(Arrays.toString(array));
		// 获取用户输入
		num = getInputNum();
		// 找出指定元素在数组中最后一次出现位置
		index = getLastIndexOf(array, num);
		// 输出下标
		printIndex(index);
	}

	/**
	 * 获取用户输入
	 * @param num 用户输入数字
	 * @return num
	 */
	public static int getInputNum() {
		int num = 0;
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入数组中的一个数字:");
		num = sc.nextInt();
		return num;
	}

	/**
	 * 找出指定元素在数组中最后一次出现位置
	 * @param array
	 * @param num
	 */
	public static int getLastIndexOf(int[] array, int num) {
		int index = -1;
		// 既然是找最后一个数字,可以倒序查找,提高效率
		for (int i = array.length - 1; i >= 0 ; i--) {
			if (array[i] == num) {
				index = i;
				break;
			}
		}
		return index;
	}

	/**
	 * 输出下标
	 * @param index
	 */
	public static void printIndex(int index) {
		if (index != -1) {
			System.out.println("指定元素在数组中最后一次出现位置为:" + index);
		} else {
			System.out.println("指定元素没有在数组中出现");
		}
	}
}

一定要注意,for循环判断 i < array.length 不是小于等于,因为是从0开始

6.找到元素在指定数组中的所有下标位置

要求:

  • 不允许在方法内打印展示
  • 考虑多个数据情况
  • 需要在方法外获取到下标数据信息
  • 不允许使用数组作为返回值

思考1:

  • 保存查询数据的下标位置一定会用到数组
  • 保存下标的数组数据类型是int类型

解决:

另外使用一个数组,作为形式参数,传递首地址,使用此数组存放下标位置,因为是传递的地址,可以直接更改数组内容,并不需要返回数组的值

思考2:

需要考虑保存下标的数组容量

解决:

返回值数组容量和原数组容量一致,这样及时数组内元素值一致且被选中,也可以存储下来

思考3:

返回值,怎么表示,用什么类型数据

new创建一个新的数组,int类型数组中,所有元素初始值都是0,用什么判断元素索引

解决:

返回找到的元素个数,没有则返回0

package cn.ocean888;

import java.util.Arrays;

public class Demo2 {
	public static void main(String[] args) {
		// 假设用户要查询3在数组中出现的位置
		int num = 3;
		int count = 0;
		int[] array1 = { 4399, 3, 360, 3, 4, 11, 32, 3, 123, 86};
		int[] array2 = new int[array1.length];
		// 在array1数组查num重复值索引放到array2中
		count = allIndexOf(array1, array2, num);
		// 打印输出查询3在数组中出现的位置
		printArray(array2, count);
		// 打印输出整个数组
		System.out.println(Arrays.toString(array2));
	}

	/**
	 * 从元素组找到元素在指定数组中的所有下标位置,将下标位置依次赋值给array2数组
	 * 返回值为array2数组长度,即有多少个重复的值
	 * @param array1 原数组
	 * @param array2 存储重复值索引的数组
	 * @return conunt 有多少个重复的值
	 */
	public  static int allIndexOf(int[] array1, int[] array2, int num) {
		// count值既是返回时的存储重复值索引的数组array2的长度,也在循环中可以当作array2的索引
		int count = 0;
		for (int i = 0; i < array1.length; i++) {
			if (array1[i] == num) {
				array2[count] = i;
				count++;
			}
		}
		return count;
	}

	/**
	 * 打印array2数组
	 * @param array2
	 */
	public static void printArray(int[] array2, int count) {
		for (int i = 0; i < count; i++) {
			System.out.println(array2[i]);
		}
	}
}

7.在指定位置插入指定元素

在数组指定位置添加元素,指定位置后面的依次往后移一位,最后一个0就是要被挤掉的,可以从后向前进行循环操作

核心代码

for (int i = array.length - 1; i > index; i--) {
				array[i] = array[i-1];
			}
			array[index] = insert;

全部代码

package cn.ocean888;

import java.util.Arrays;

public class Demo3 {
	// 在指定位置插入指定元素
	public static void main(String[] args) {
		// 先定义数组,最后一个0就是要被挤掉的
		int[] array = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 0};
		System.out.println(Arrays.toString(array));
		// 要加入位置的索引
		int index = 6;
		// 要加到这个数组里的数字
		int insert = 12;
		boolean status = false;
		status = addElement(array, index, insert);
		printResult(status, array);
	}

	/**
	 * 在数组指定位置添加元素,后面的依次往后移一位
	 * @param array 要添加元素的数组
	 * @param index 添加进数组的位置索引
	 * @param insert 要添加进入数组对应位置的值
	 * @return 返回是否添加成功
	 */
	public static boolean addElement (int[] array, int index, int insert) {
		// 判断插入位置是否存在于数组中
		if (index < 0 || index >= array.length) {
			return false;
		} else {
			// 要插入元素位置开始往后元素依次向后移一位
			for (int i = array.length - 1; i > index; i--) {
				array[i] = array[i-1];
			}
			array[index] = insert;

			return true;
		}
	}

	/**
	 * 输出更新后的数组
	 * @param status 添加元素是否成功的状态
	 * @param array 更新后的数组
	 */
	public static void printResult(boolean status, int[] array) {
		if (status) {
			System.out.println(Arrays.toString(array));
		} else {
			System.out.println("Input Parameter Error");
		}
	}
}

超出数组会溢出

8.删除数组中指定下标的元素

和添加元素基本一致,逻辑变为从删除位置开始之后的元素都往前移一位,直接覆盖掉要删除位置元素

核心代码

for (int i = index; i < array.length - 1; i++) {
				array[i] = array[i+1];
			}
			// 最后一个元素补零
			array[array.length - 1] = 0;
			return true;

0代表无效元素,占位使用

全部代码

package cn.ocean888;

import java.util.Arrays;

public class Demo3 {
	// 删除指定位置元素
	public static void main(String[] args) {
		// 先定义数组
		int[] array = { 1, 3, 5, 7, 9, 11, 11, 13, 15, 17};
		System.out.println(Arrays.toString(array));
		// 要删除位置的索引
		int index = 6;
		boolean status = false;
		status = delElement(array, index);
		printResult(status, array);
	}

	/**
	 * 在数组指定位置删除元素,后面的依次往前移一位
	 * @param array 要添加元素的数组
	 * @param index 添加进数组的位置索引
	 * @return 返回是否添加成功
	 */
	public static boolean delElement (int[] array, int index) {
		// 判断删除位置是否存在于数组中
		if (index < 0 || index >= array.length) {
			return false;
		} else {
			// 要删除元素位置开始往后元素依次向前移一位
			for (int i = index; i < array.length - 1; i++) {
				array[i] = array[i+1];
			}
			// 最后一个元素补零
			array[array.length - 1] = 0;
			return true;
		}
	}

	/**
	 * 输出更新后的数组
	 * @param status 添加元素是否成功的状态
	 * @param array 更新后的数组
	 */
	public static void printResult(boolean status, int[] array) {
		if (status) {
			System.out.println(Arrays.toString(array));
		} else {
			System.out.println("Input Parameter Error");
		}
	}
}

9.冒泡排序算法

首先要明白一点,形参是引用传值,传的是数组的首地址,操作的还是原来的数组

package cn.ocean888;

import java.util.Arrays;

public class Demo4 {
	public static void main(String[] args) {
		int[] array = { 4399, 3, 360, 3, 4, 11, 32, 3, 123, 86};
		System.out.println(Arrays.toString(array));
		arraySort(array);
		System.out.println(Arrays.toString(array));
	}

    	public static void arraySort(int[] array) {
		array[5] = 0;
	}
}

for循环示意图,也就是10个数两两比较,需要9次可以找出一个最大值,并且将最大值放到最后边

i表示外部即第一层循环控制循环次数

j表示内部即第二层循环控制那些数两两间进行比较

i=0 时,j 要循环9次,找出最大值放到最后,下一次循环时最大值就不需要再管了

i=1 时,因为已经找到了最大值,所以这次 j 循环八次就可以了

i和j的对应关系: j = 数组长度 -1 - i

为啥要减1:因为10个数两两比较,仅需要比较九次

源码如下

package cn.ocean888;

import java.util.Arrays;

public class Demo4 {
	public static void main(String[] args) {
		// 冒泡排序算法,由小到大排序
		int[] array = { 4399, 3, 360, 3, 4, 11, 32, 3, 123, 86};
		// 打印数组
		System.out.println(Arrays.toString(array));
		// 进行排序
		arraySort(array);
		// 打印数组
		System.out.println(Arrays.toString(array));
	}

	/**
	 * 冒泡排序
	 * @param array 要排序的数组
	 */
	public static void arraySort(int[] array) {
		// 临时变量
		int temp = 0;
		// 第一层循环控制循环次数
		for (int i = 0; i < array.length - 1; i++) {
			// 第二层循环控制那些数两两间进行比较
			for (int j = 0; j < array.length -1 - i; j++) {
				// 如果时从小到大排序if判断就用<
				// 如果时从小到大排序if判断就用>
				if (array[j+1] < array[j]) {
					// 两个值间通过一个临时变量进行互换
					temp = array[j+1];
					array[j+1] = array[j];
					array[j] = temp;
				}
			}
		}
	}
}

排序效果

10.选择排序

选择排序基本想法是:比如有10个数,最大值在每次循环前初始化设置为数组第1个元素的值即array[0],然后与数组的其他剩余元素进行比较,所以比较次数就是数组总元素-1,10个数循环9次就可以找到最大值,最大值和本次最后的项位置进行互换

在i=1时,因为已经找到一个最大值并且放到最后了,所以j可以少循环依次

j = 数组的长度-i-1

i = 1 时

package cn.ocean888;

import java.util.Arrays;

import javax.swing.plaf.basic.BasicInternalFrameTitlePane.MaximizeAction;

public class Demo5 {
	public static void main(String[] args) {
		// 选择排序算法,由小到大排序
		// 要排序的原数组
		int[] array = { 4399, 3, 360, 3, 4, 11, 32, 3, 123, 86};
		// 打印数组
		System.out.println(Arrays.toString(array));
		// 进行排序
		arraySort(array);
		// 打印数组
		System.out.println(Arrays.toString(array));
	}

	/**
	 * 选择排序算法,由小到大排序
	 * @param array 要排序的数组,引用赋值直接操作数组不需要返回值
	 */
	public static void arraySort(int[] array) {
		for (int i = 0; i < array.length; i++) {
			int max = 0;
			int temp = 0;
			// 找出最大值索引,赋值给max
			for (int j = 0; j < array.length - i; j++) {
				if (array[j] > array[max]) {
					max = j;
				}
			}
			// 将最大值和本次最后的项进行互换
			temp = array[array.length - 1 -i];
			array[array.length - 1 -i] = array[max];
			array[max] = temp;
		}
	}
}

效果展示

选择排序相较于冒泡排序来说要快一些,选择排序的时间复杂度为n(n-1)/2,而冒泡排序为O(n^2),一般建议选择排序,当然还有其他更好的排序方法。

到此这篇关于java数组算法例题代码详解(冒泡排序,选择排序,找最大值、最小值,添加、删除元素等)的文章就介绍到这了,更多相关java数组算法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java对数组实现选择排序算法的实例详解

    一. 算法描述     选择排序:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成. 以下面5个无序的数据为例: 56 12 80 91 20(文中仅细化了第一趟的选择过程) 第1趟:12 56 80 91 20 第2趟:12 20 80 91 56 第3趟:12 20 56 91 80 第4趟

  • Java实现求数组最长子序列算法示例

    本文实例讲述了Java实现求数组最长子序列算法.分享给大家供大家参考,具体如下: 问题:给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱) 例如:给定一个长度为8的数组A{1,3,5,2,4,6,7,8},则其最长的单调递增子序列为{1,2,4,6,7,8},长度为6. 思路1:第一眼看到题目,很多人肯定第一时间想到的是LCS.先给数组排个序形成新数组,然后再把新数组和原数组拿来求LCS,即可得到答案.这种解法很多人能想得到,所以就不再赘述. 思路2:按照思路1的

  • java数据结构排序算法之树形选择排序详解

    本文实例讲述了java数据结构排序算法之树形选择排序.分享给大家供大家参考,具体如下: 这里我们就来说说选择类排序之一的排序:树形选择排序 在简单选择排序中,每次的比较都没有用到上次比较的结果,所以比较操作的时间复杂度是O(N^2),想要降低比较的次数,则需要把比较过程中的大小关系保存下来.树形选择排序是对简单选择排序的改进. 树形选择排序:又称锦标赛排序(Tournament Sort),是一种按照锦标赛的思想进行选择排序的方法.首先对n个记录的关键字进行两两比较,然后在n/2个较小者之间再进

  • Java获得一个数组的指定长度排列组合算法示例

    本文实例讲述了Java获得一个数组的指定长度排列组合算法.分享给大家供大家参考,具体如下: package demo; import java.util.Stack; /** * JAVA获得一个数组的指定长度的排列组合.<br> * * @author JAVA世纪网(java2000.net, laozizhu.com) */ public class TestSequenceAll { public static void main(String[] args) { TestSequen

  • 详解Java冒泡排序

    先贴出代码(从小到大排序): public class BubbleSort { public static void main(String args[]){ double[] a={0,1,5,9,10,2,4,6,3,7,8,-3,0.4,-2.5}; for (int i=0;i<a.length-1;i++){ //外层循环控制排序趟数 for (int j=0;j<a.length-i-1;j++){ //内层循环控制每一趟排序多少次 if (a[j]>a[j+1]){ //

  • Java算法之冒泡排序实例代码

    java算法-冒泡排序练习 所谓冒泡就是一堆数据相邻的互相比较,把大的数据往后移,小的数据往前移. 百度上找了张图 大家自己想一想这个逻辑 想明白了,直接看代码. public class Two { public static void main(String[] args) { int arg[] = {25,36,15,274}; sort(arg); } private static void sort(int[] array) { for (int j = 1; j < array.l

  • Java中打乱一个数组的2种公平算法分享

    公平算法,打乱数组 这是前几天面试的时候遇见的一道题目,看到这个题首先想到了洗牌程序: 方法一:洗牌程序原理 在java.util包中的Collections类中的 shuffle方法,现在手工实现以下代码如下: package test.ms; import java.util.Random; public class Redistribute2 { public static void main(String[] args) { //define the array int[] s = {1

  • Java冒泡排序法和选择排序法的实现

    冒泡排序法和选择排序法 本人学生党一枚.Java学习过程,写这个博客纯属当复习,有什么错误的地方请大家指出来在评论里指点指点我.谢谢 冒泡排序法 概念: 从前向后(或从后向前)依次比较相邻的元素,若发现逆顺序,则交换.小的向前换,大的向后换,像水底的气泡逐渐向上冒,顾名思义冒泡排序法. 通俗一点就是把大的往上挪!向冒泡一样. 是交换式排序法的一种.冒泡排序法效率较低. 冒泡排序法思路 1:外层循环:控制它要走几次. 假设你有5个数,那就要走4次,最后一次不用走,最后那个数已经在它位置了所以就要l

  • Java实现求子数组和的最大值算法示例

    本文实例讲述了Java实现求子数组和的最大值算法.分享给大家供大家参考,具体如下: 一般C和C++在算法实现中使用较多,下面我们通过java语言实现算法,更有亲切感. 题目: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18. 实现代码: package arrDe

  • java数组算法例题代码详解(冒泡排序,选择排序,找最大值、最小值,添加、删除元素等)

    数组算法例题 1.数组逆序 第一个和最后一个互换,第二个和倒数第二个互换,就相当于把数组想下图一样,进行对折互换,如果数组个数为奇数,则中间保持不变其余元素互换即可 import java.util.Arrays; class Demo12 { public static void main (String[] args) { int[] arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; System.out.println(Arrays.toString(arr));

  • java实现队列数据结构代码详解

    什么是队列结构 一种线性结构,具有特殊的运算法则[只能在一端(队头)删除,在另一端(队尾)插入]. 分类: 顺序队列结构 链式队列结构 基本操作: 入队列 出队列 给出一些应用队列的场景 1):当作业被送到打印机的时候,就可以按到达的顺序排起来,因此每一份作业是队列的节点. 2):售票口的人买票的顺序的按照先来先买的顺序售票. 3):当所有的终端被占用,由于资源有限,来访请求需要放在一个队列中等候. 队列是先进先出的! 我们设置一个叫做LinkQueue<T>的泛型集合类,该类里面有 Node

  • Java中可变长度参数代码详解

    到J2SE1.4为止,一直无法在Java程序里定义实参个数可变的方法--因为Java要求实参(Arguments)和形参(Parameters)的数量和类型都必须逐一匹配,而形参的数目是在定义方法时就已经固定下来了.尽管可以通过重载机制,为同一个方法提供带有不同数量的形参的版本,但是这仍然不能达到让实参数量任意变化的目的. 然而,有些方法的语义要求它们必须能接受个数可变的实参--例如著名的main方法,就需要能接受所有的命令行参数为实参,而命令行参数的数目,事先根本无法确定下来. 对于这个问题,

  • java反射方式创建代码详解

    在谈到实例的时候,很多人对这个概念还不能说出所以然.其实实例就是一个具体的对象,像我们之前学习的类.数组都可以创建实例.反射相对而言也是比较抽象的概念,所以我们是能够把它实例化的.下面简单对实例进行了解,然后分别带来无参和有参的反射实例实例化方法. 1.实例说明 new 一个对象是实例,可以把这个new出来的对象叫做实例,说白了就是这个new出来的"东西",叫它对象也可以,叫它实例也可以,对象和实例在这个角度上来讲是等价的. 2.创建空参的实例 使用Class对象的newInstanc

  • Java回调函数实例代码详解

    首先说说什么叫回调函数? 在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就 称为回调.在调用接口时,需要严格的按照定义的参数和方法调用,并且需要处理函数的异步,否则会导致程序的崩溃. 这样的解释似乎还是比较难懂,这里举个简 单的例子: 程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序.程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法.目的达到

  • 通过反射实现Java下的委托机制代码详解

    简述 一直对Java没有现成的委托机制耿耿于怀,所幸最近有点时间,用反射写了一个简单的委托模块,以供参考. 模块API public Class Delegater()//空参构造,该类管理委托实例并实现委托方法 //添加一个静态方法委托,返回整型值ID代表该方法与参数构成的实例.若失败,则返回-1. public synchronized int addFunctionDelegate(Class<?> srcClass,String methodName,Object... params)

  • java内部测试类代码详解

    我们一般使用的java内部类有4种形式:一般内部类.局部内部类.匿名内部类.静态内部类.以下是我作的一个测试,以说明各种内部类的特性. 有关内部类的特性,代码中有详细说明,如下. /* * java内部类测试 * * InterObj反射结果: * * private int i * private InterObj$InterA ia * public InterObj() * public static void main(java.lang.String[]) * private int

  • Java编程复用类代码详解

    本文研究的主要是Java编程中的复用类,那么到底复用类是什么东西,又有什么用法,下面具体介绍. 看了老罗罗升阳的专访,情不自禁地佩服,很年轻,我之前以为和罗永浩一个级别的年龄,也是见过的不是初高中编程的一位大牛之一,专访之后,发现老罗也是一步一个脚印的人.别说什么难做,做不了,你根本就没去尝试,也没有去坚持. If you can't fly then run,if you can't run then walk, if you can't walk then crawl,but whateve

  • 一个通用的Java分页基类代码详解

    分页的基类 import java.util.List; /** * 分页显示的标准类,基本操作,是先给予-当前页数一共的数据条数-每页显示的条数, * 然后在初始化该类,得到总共页数,和开始序号和结束序号, * 然后数据库分页用到开始序号和结束序号,得到数据集合后赋值给该类的list属性, * * 然后把该类发送到jsp页面,进行访问 * @author admin * * @param <T> */ public class PageBean<T> { private int

  • 使用 Node.js 实现图片的动态裁切及算法实例代码详解

    背景&概览 目前常见的图床服务都会有图片动态裁切的功能,主要的应用场景用以为各种终端和业务形态输出合适尺寸的图片. 一张动辄以 MB 为计量单位的原始大图,通常不会只设置一下显示尺寸就直接输出到终端中,因为体积太大加载体验会很差,除了影响加载速度还会增加终端设备的内存占用.所以要想在各种终端下都能保证图片质量的同时又确保输出合适的尺寸,那么此时就需要根据图片 URL 来对原始图片进行裁切,然后动态生成并输出一张新的图片. URL 的设计 图片 URL 需要包含图片 id.尺寸.质量等信息.有两种

随机推荐