/* * 网上看到一道题,挺有意思。记录下来。 */ package array; public class RandomArray<T> { private T[] array; private Object[] result; private Integer count = 0; private T[] getArray() { return array; } private void setArray(T[] array) { this.array = array; Integer size = 1; for (Integer i = array.length; i >= 1; i --) { size *= i; } System.out.println("result size = " + size); this.result = new Object[size]; } private Object[] getResult() { return result; } private void putElementToResult(T[] array) { result[count] = array; } private RandomArray (T[] array) { this.setArray(array); } private void exchange (Integer originalIndex, Integer destinationIndex) { if (originalIndex.compareTo(destinationIndex) == 0) { return; } T[] array = this.getArray(); T temp = array[originalIndex]; array[originalIndex] = array[destinationIndex]; array[destinationIndex] = temp; } private Object[] copyArray(T[] array) { Object[] objs = new Object[array.length]; for (Integer i = 0; i < array.length; i++) { objs[i] = array[i]; } return objs; } private void arrayHandler (Integer startIndex, Integer endIndex) { if (startIndex.compareTo(endIndex) != 0) { for(Integer i = startIndex; i <= endIndex; i ++ ) { exchange(startIndex, i); arrayHandler(startIndex + 1, endIndex); exchange(i, startIndex); } } else { @SuppressWarnings("unchecked") T[] param = (T[]) copyArray(array); this.putElementToResult(param); this.count ++; } } private Integer getRandomNumber() { Integer countLength = count.toString().length(); while(true) { Long currentMillis = System.currentTimeMillis(); String compareVal = currentMillis.toString().substring(currentMillis.toString().length() - countLength); Integer number = getValidNumber(compareVal); if (number <= count) { return number; } } } private Integer getValidNumber(String compareVal) { if ("0".equals(compareVal)) { return 0; } else if(compareVal.startsWith("0")) { compareVal = compareVal.replaceFirst("0", ""); return getValidNumber(compareVal); } else { return Integer.valueOf(compareVal); } } @SuppressWarnings("unchecked") private T[] convertObjectArrayToGenericArray(Object[] data, T[] container) { for(Integer i = 0; i < data.length; i ++) { container[i] = (T) data[i]; } return container; } public T[] getRandomArray(T[] container) { arrayHandler(0,this.getArray().length - 1); Object[] _this = this.getResult(); Integer indexNumber = getRandomNumber(); Object[] objs = (Object[]) _this[indexNumber]; return convertObjectArrayToGenericArray(objs, container); } public static void main(String[] args) { /* *test */ String[] array = {"1","2","3"}; RandomArray<String> ran = new RandomArray<String>(array); String[] randomArray = ran.getRandomArray(new String[3]); for (String str: randomArray) { System.out.print(str + " "); } } }
不用其他jar包,获取随机排列数组。
猜你喜欢
转载自vortexchoo.iteye.com/blog/2319726
今日推荐
周排行