package com.yuyh.library.utils; import java.util.Stack; /** * @author yuyh. * @date 16/4/11. */ public class ArrayUtils { /** * 在数组objects中搜索元素element * * @param objects 待操作的数组 * @param element 待匹配的元素 * @return 索引,如不存在,-1 */ public static int search(Object[] objects, Object element) { int e = -1; for (int w = 0; w < objects.length; w++) { if (!element.equals(objects[w])) { continue; } else { e = w; break; } } return e; } /**************************** 数组排序 ******************************/ /** * 使用选择排序法,对数组intArray进行排序 * * @param intArray 待排序的数组 * @param ascending 升序 */ public static void sortingByChoose(int[] intArray, boolean ascending) { for (int cankaozhi = 0; cankaozhi < intArray.length - 1; cankaozhi++) { int zhongjian = intArray[cankaozhi]; int zuixiao = 0; for (int zujian = cankaozhi + 1; zujian <= intArray.length - 1; zujian++) { boolean typee = true; if (ascending) { typee = zhongjian > intArray[zujian]; } else { typee = zhongjian < intArray[zujian]; } if (typee) { zhongjian = intArray[zujian]; zuixiao = zujian; } } if (zuixiao != 0) { int f = intArray[zuixiao]; intArray[zuixiao] = intArray[cankaozhi]; intArray[cankaozhi] = f; } } } /** * 使用插入排序法,对数组intArray进行排序 * * @param intArray 待排序的数组 * @param ascending 升序 */ public static void sortingByInsert(int[] intArray, boolean ascending) { for (int i = 1; i < intArray.length; i++) { int t = intArray[i]; int y = -1; for (int j = i - 1; j >= 0; j--) { boolean typee = true; if (ascending) { typee = t < intArray[j]; } else { typee = t > intArray[j]; } if (!typee) break; intArray[j + 1] = intArray[j]; y = j; } if (y > -1) intArray[y] = t; } } /** * 使用冒泡排序法,对数组intArray进行排序 * * @param intArray 待排序的数组 * @param ascending 升序 */ public static void sortingByBubbling(int[] intArray, boolean ascending) { for (int e = 0; e < intArray.length - 1; e++) { for (int r = 0; r < intArray.length - 1; r++) { boolean typee = true; if (ascending) { typee = intArray[r] > intArray[r + 1]; } else { typee = intArray[r] < intArray[r + 1]; } if (typee) { int t = intArray[r]; intArray[r] = intArray[r + 1]; intArray[r + 1] = t; } } } } /** * 使用递归快排法,对数组intArray进行排序 * * @param intArray 待排序的数组 * @param ascending 排序的方式,用本类中的静态字段指定 */ public static void sortingByFastRecursion(int[] intArray, int start, int end, boolean ascending) { int tmp = intArray[start]; int i = start; if (ascending) { for (int j = end; i < j; ) { while (intArray[j] > tmp && i < j) { j--; } if (i < j) { intArray[i] = intArray[j]; i++; } for (; intArray[i] < tmp && i < j; i++) { } if (i < j) { intArray[j] = intArray[i]; j--; } } } else { for (int j = end; i < j; ) { while (intArray[j] < tmp && i < j) { j--; } if (i < j) { intArray[i] = intArray[j]; i++; } for (; intArray[i] > tmp && i < j; i++) { } if (i < j) { intArray[j] = intArray[i]; j--; } } } intArray[i] = tmp; if (start < i - 1) { sortingByFastRecursion(intArray, start, i - 1, ascending); } if (end > i + 1) { sortingByFastRecursion(intArray, i + 1, end, ascending); } } /** * 使用栈快排法,对数组intArray进行排序 * * @param intArray 待排序的数组 * @param ascending 升序 */ public static void sortingByFastStack(int[] intArray, boolean ascending) { Stack<Integer> sa = new Stack<Integer>(); sa.push(0); sa.push(intArray.length - 1); while (!sa.isEmpty()) { int end = ((Integer) sa.pop()).intValue(); int start = ((Integer) sa.pop()).intValue(); int i = start; int j = end; int tmp = intArray[i]; if (ascending) { while (i < j) { while (intArray[j] > tmp && i < j) { j--; } if (i < j) { intArray[i] = intArray[j]; i++; } for (; intArray[i] < tmp && i < j; i++) { ; } if (i < j) { intArray[j] = intArray[i]; j--; } } } else { while (i < j) { while (intArray[j] < tmp && i < j) { j--; } if (i < j) { intArray[i] = intArray[j]; i++; } for (; intArray[i] > tmp && i < j; i++) { ; } if (i < j) { intArray[j] = intArray[i]; j--; } } } intArray[i] = tmp; if (start < i - 1) { sa.push(Integer.valueOf(start)); sa.push(Integer.valueOf(i - 1)); } if (end > i + 1) { sa.push(Integer.valueOf(i + 1)); sa.push(Integer.valueOf(end)); } } } /** * 将数组颠倒 * @param objects * @return */ public static Object[] upsideDown(Object[] objects) { int length = objects.length; Object tem; for (int w = 0; w < length / 2; w++) { tem = objects[w]; objects[w] = objects[length - 1 - w]; objects[length - 1 - w] = tem; tem = null; } return objects; } /**************************** 数组转换 ******************************/ /** * Integer数组转换成int数组 * @param integers * @return */ public static int[] integersToInts(Integer[] integers) { int[] ints = new int[integers.length]; for (int w = 0; w < integers.length; w++) { ints[w] = integers[w]; } return ints; } /** * 将给定的数组转换成字符串 * * @param integers 给定的数组 * @param startSymbols 开始符号 * @param separator 分隔符 * @param endSymbols 结束符号 * @return 例如开始符号为"{",分隔符为", ",结束符号为"}",那么结果为:{1, 2, 3} */ public static String toString(int[] integers, String startSymbols, String separator, String endSymbols) { boolean addSeparator = false; StringBuffer sb = new StringBuffer(); //如果开始符号不为null且不空 if (!StringUtils.isEmpty(startSymbols)) { sb.append(startSymbols); } //循环所有的对象 for (int object : integers) { //如果需要添加分隔符 if (addSeparator) { sb.append(separator); addSeparator = false; } sb.append(object); addSeparator = true; } //如果结束符号不为null且不空 if (!StringUtils.isEmpty(endSymbols)) { sb.append(endSymbols); } return sb.toString(); } /** * 将给定的数组转换成字符串 * * @param integers 给定的数组 * @param separator 分隔符 * @return 例如分隔符为", "那么结果为:1, 2, 3 */ public static String toString(int[] integers, String separator) { return toString(integers, null, separator, null); } /** * 将给定的数组转换成字符串,默认分隔符为", " * * @param integers 给定的数组 * @return 例如:1, 2, 3 */ public static String toString(int[] integers) { return toString(integers, null, ", ", null); } /** * 将给定的数组转换成字符串 * * @param objects 给定的数组 * @param startSymbols 开始符号 * @param separator 分隔符 * @param endSymbols 结束符号 * @return 例如开始符号为"{",分隔符为", ",结束符号为"}",那么结果为:{1, 2, 3} */ public static String toString(Object[] objects, String startSymbols, String separator, String endSymbols) { boolean addSeparator = false; StringBuffer sb = new StringBuffer(); //如果开始符号不为null且不空 if (!StringUtils.isEmpty(startSymbols)) { sb.append(startSymbols); } //循环所有的对象 for (Object object : objects) { //如果需要添加分隔符 if (addSeparator) { sb.append(separator); addSeparator = false; } sb.append(object); addSeparator = true; } //如果结束符号不为null且不空 if (!StringUtils.isEmpty(endSymbols)) { sb.append(endSymbols); } return sb.toString(); } /** * 将给定的数组转换成字符串 * * @param objects 给定的数组 * @param separator 分隔符 * @return 例如分隔符为", "那么结果为:1, 2, 3 */ public static String toString(Object[] objects, String separator) { return toString(objects, null, separator, null); } /** * 将给定的数组转换成字符串,默认分隔符为", " * * @param objects 给定的数组 * @return 例如:1, 2, 3 */ public static String toString(Object[] objects) { return toString(objects, null, ", ", null); } }