1. package org.jr.util;
  2. /**
  3. * Copyright: Copyright (c) 2002-2004
  4. * Company: JavaResearch(http://www.javaresearch.org)
  5. * 最后更新日期:2003年4月1日
  6. * @author Cherami
  7. */
  8. /**
  9. * 数组操作工具类,提供常见的数组操作需要的方法。
  10. * @since 0.5
  11. */
  12. public class ArrayUtil {
  13. /**
  14. * 私有构造方法,防止类的实例化,因为工具类不需要实例化。
  15. */
  16. private ArrayUtil() {
  17. }
  18. /**
  19. * 得到初始化好的int数组。
  20. * @param length 数组长度
  21. * @return 初始化后的int数组,各个元素的值和其索引值相等。
  22. * @since 0.5
  23. */
  24. public static int[] getInitedIntArray(int length) {
  25. int[] indexes = new int[length];
  26. for (int i = 0; i < length; i++) {
  27. indexes[i] = i;
  28. }
  29. return indexes;
  30. }
  31. /**
  32. * 得到初始化好的int数组。
  33. * @param length 数组长度
  34. * @param value 初始值
  35. * @return 初始化后的int数组,各个元素的值都等于指定的value。
  36. * @since 0.5
  37. */
  38. public static int[] getInitedIntArray(int length, int value) {
  39. int[] indexes = new int[length];
  40. for (int i = 0; i < length; i++) {
  41. indexes[i] = value;
  42. }
  43. return indexes;
  44. }
  45. /**
  46. * 得到初始化好的boolean数组。
  47. * @param length 数组长度
  48. * @param value 初始值
  49. * @return 初始化后的boolean数组,各个元素的值都等于value。
  50. * @since 0.5
  51. */
  52. public static boolean[] getInitedBooleanArray(int length, boolean value) {
  53. boolean[] indexes = new boolean[length];
  54. for (int i = 0; i < length; i++) {
  55. indexes[i] = value;
  56. }
  57. return indexes;
  58. }
  59. /**
  60. * 得到指定的对象在对象数组中的索引。
  61. * @param objects 对象数组
  62. * @param object 对象
  63. * @return 对象在对象数组中的位置,不存在于数组中时返回-1
  64. * @since 0.5
  65. */
  66. public static int indexOf(Object[] objects, Object object) {
  67. for (int i = 0; i < objects.length; i++) {
  68. if (objects[i].equals(object)) {
  69. return i;
  70. }
  71. }
  72. return -1;
  73. }
  74. /**
  75. * 将原数组的值拷贝到目标数组。
  76. * 目标数组的大小必须大于等于原数组,一般应该是大小相等,如果目标数组的大小较大则大于的部分保留原值。
  77. * @param orginalArray 原数组
  78. * @param targetArray 目标数组
  79. * @since 0.5
  80. */
  81. public static void copyArrayValue(int[] orginalArray, int[] targetArray) {
  82. for (int i = 0; i < orginalArray.length; i++) {
  83. targetArray[i] = orginalArray[i];
  84. }
  85. }
  86. /**
  87. * 将数组中的值移位。
  88. * 移动的方式是将指定位置以后的每个元素依次往前移动一位,指定位置的值移到最后。
  89. * @param array 数组
  90. * @param index 位置
  91. * @since 0.5
  92. */
  93. public static void shiftArray(int[] array, int index) {
  94. int temp = array[index];
  95. int length = array.length - 1;
  96. for (int i = index; i < length; i++) {
  97. array[i] = array[i + 1];
  98. }
  99. array[length] = temp;
  100. }
  101. /**
  102. * 打印数组的值。
  103. * 数组前后为一个"["和"]",中间用逗号分隔。
  104. * @param array 数组
  105. * @since 0.5
  106. */
  107. public static void printArray(int[] array) {
  108. int length = array.length - 1;
  109. StringBuffer buffer = new StringBuffer(length * 5);
  110. buffer.append("[");
  111. for (int i = 0; i < length; i++) {
  112. buffer.append(array[i]);
  113. buffer.append(",");
  114. }
  115. buffer.append(array[length] + "]");
  116. System.out.println(buffer.toString());
  117. }
  118. /**
  119. * 将指定的值插入到数组中的指定位置。
  120. * 数组最后一个元素的值将被丢弃。
  121. * @param array 数组
  122. * @param index 插入位置的索引
  123. * @param value 插入的值
  124. * @since 0.5
  125. */
  126. public static void insertValueToArray(int[] array, int index, int value) {
  127. int length = array.length - 1;
  128. for (int i = length; i > index; i--) {
  129. array[i] = array[i - 1];
  130. }
  131. array[index] = value;
  132. }
  133. /**
  134. * 以指定的索引顺序打印整型数组的值。
  135. * 两个数组的长度应该是相等的,但是程序中没有进行判断。
  136. * 数组前后为一个"["和"]",中间用逗号分隔。
  137. * @param array 数组
  138. * @param indexes 索引数组
  139. * @since 0.6
  140. */
  141. public static void printArrayByIndexes(int[] array,int[] indexes) {
  142. int length = array.length - 1;
  143. StringBuffer buffer = new StringBuffer(length * 5);
  144. buffer.append("[");
  145. for (int i = 0; i < length; i++) {
  146. buffer.append(array[indexes[i]]);
  147. buffer.append(",");
  148. }
  149. buffer.append(array[indexes[length]] + "]");
  150. System.out.println(buffer.toString());
  151. }
  152. /**
  153. * 将数组的值全部反转。
  154. * @param array 数组
  155. * @since 0.6
  156. */
  157. public static void reverseArray(int[] array) {
  158. int end =array.length-1;
  159. int limit=array.length2;
  160. for (int i=0;i<limit ;i++ ) {
  161. int temp=array[i];
  162. array[i]=array[end-i];
  163. array[end-i]=temp;
  164. }
  165. }
  166. }