|
package com.sitinspring;
![]() /** *//** * 整形數(shù)組實(shí)用類(lèi),能求兩數(shù)組的并交差集,不借助于集合類(lèi) * @author: sitinspring(junglesong@gmail.com) * @date: 2008-6-24-下午10:13:33 */ public final class IntegerArrayUtil { // 私有構(gòu)造函數(shù),防止創(chuàng)建IntegerArrayUtil的實(shí)例 private IntegerArrayUtil() { } /** *//** * 取得兩數(shù)組并集 * @param arr1 * @param arr2 * @return */ public static int[] union(int[] arr1,int[] arr2) { DynamicArray dynamicArray=new DynamicArray(); for(int temp:arr1) { dynamicArray.add(temp); } for(int temp:arr2) { if(!exist(temp,arr1)) { dynamicArray.add(temp); } } return dynamicArray.getArr(); } /** *//** * 取得兩數(shù)組交集 * @param arr1 * @param arr2 * @return */ public static int[] intersact(int[] arr1,int[] arr2) { DynamicArray dynamicArray=new DynamicArray(); for(int temp:arr1) { if(exist(temp,arr2)) { dynamicArray.add(temp); } } return dynamicArray.getArr(); } /** *//** * 取得兩數(shù)組差集 * @param arr1 * @param arr2 * @return */ public static int[] minus(int[] arr1,int[] arr2) { DynamicArray dynamicArray=new DynamicArray(); for(int temp:arr1) { if(!exist(temp,arr2)) { dynamicArray.add(temp); } } return dynamicArray.getArr(); } /** *//** * 判斷number在數(shù)組arr中是否存在 * @param number * @param arr * @return */ private static boolean exist(int number,int[] arr) { for(int temp:arr) { if(number==temp) { return true; } } return false; } /** *//** * 顯示數(shù)組元素 * @param arr */ private static void display(int[] arr) { for(int temp:arr) { System.out.print(temp+","); } System.out.println(); } public static void main(String[] args) { int[] arr1= {1,2,3,4,5,0,-1,-2,-3,-4,-5,}; int[] arr2= {6,2,7,4,8,0,-1,-2,};![]() System.out.print("數(shù)組arr1為"); display(arr1); System.out.print("數(shù)組arr2為"); display(arr2); System.out.print("arr1和arr2的并集為"); display(IntegerArrayUtil.union(arr1, arr2)); System.out.print("arr1和arr2的交集為"); display(IntegerArrayUtil.intersact(arr1, arr2)); System.out.print("arr1和arr2的差集為"); display(IntegerArrayUtil.minus(arr1, arr2)); } }輸出: 數(shù)組arr1為1,2,3,4,5,0,-1,-2,-3,-4,-5, 數(shù)組arr2為6,2,7,4,8,0,-1,-2, arr1和arr2的并集為1,2,3,4,5,0,-1,-2,-3,-4,-5,6,7,8, arr1和arr2的交集為2,4,0,-1,-2, arr1和arr2的差集為1,3,5,-3,-4,-5,![]() 動(dòng)態(tài)數(shù)組類(lèi): package com.sitinspring;![]() /** *//** * 動(dòng)態(tài)數(shù)組類(lèi),以數(shù)組為數(shù)據(jù)容器實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的功能 * @author: sitinspring(junglesong@gmail.com) * @date: 2008-6-23-下午10:08:09 */ public class DynamicArray { /** *//** *//** *//** * 用于存儲(chǔ)數(shù)據(jù)的數(shù)組 */ private int[] arr;![]() /** *//** *//** *//** * 初始化大小 */ private static final int initSize = 10;![]() /** *//** *//** *//** * 當(dāng)前元素個(gè)數(shù) */ private int currItemsCount = 0;![]() /** *//** *//** *//** * 構(gòu)造函數(shù)一,固定大小 */ public DynamicArray() { arr = new int[initSize]; } /** *//** *//** *//** * 構(gòu)造函數(shù)二,指定大小 */ public DynamicArray(int len) { arr = new int[len]; }![]() /** *//** *//** *//** * 取得位置在i的元素 */ public int get(int i) { if (i < currItemsCount) { return arr[i]; }![]() return -999; }![]() /** *//** *//** *//** * 取得數(shù)組中已有元素的個(gè)數(shù) * @return */ public int size() { return currItemsCount; }![]() /** *//** *//** *//** * 添加一個(gè)元素到數(shù)組 * @param number */ public void add(int number) { if (currItemsCount >= arr.length) { int[] arrNew = new int[arr.length * 2]; for (int i = 0; i < arr.length; i++) { arrNew[i] = arr[i]; }![]() arr = arrNew; }![]() arr[currItemsCount] = number; currItemsCount++; }![]() /** *//** *//** *//** * 刪除位置在i的元素 * @param removeIndex */ public void remove(int removeIndex) { if (removeIndex < arr.length) { if (removeIndex > currItemsCount) { int[] arrNew = new int[arr.length - 1]; for (int j = 0; j < arrNew.length; j++) { arrNew[j] = arr[j]; }![]() arr = arrNew; } else { int[] arrNew = new int[arr.length - 1]; for (int j = 0; j < removeIndex; j++) { arrNew[j] = arr[j]; }![]() for (int j = removeIndex + 1; j < arr.length; j++) { arrNew[j - 1] = arr[j]; } currItemsCount--; arr = arrNew; } } }![]() /** *//** *//** *//** * 取得添值部分的數(shù)組 * @return */ public int[] getArr() { int[] arrNew = new int[currItemsCount];![]() for (int i = 0; i < arrNew.length; i++) { arrNew[i] = arr[i]; }![]() return arrNew; } /** *//** *//** *//** * 取得已排序的數(shù)組 * @return */ public int[] getSortedArr() { int[] arrSorted = getArr(); insertSort(arrSorted); return arrSorted; }![]() /** *//** *//** *//** * 進(jìn)行插入排序 * @param arr */ private static void insertSort(int[] arr) { int i, temp; // 插入位置 int insertPos; for (i = 1; i < arr.length; i++) { // 當(dāng)前需要進(jìn)入已排序隊(duì)列的項(xiàng) temp = arr[i]; insertPos = i;![]() // 向右移動(dòng) while (0 < insertPos && arr[insertPos - 1] >= temp) { arr[insertPos] = arr[insertPos - 1]; --insertPos; }![]() // 當(dāng)前項(xiàng)該處于的位置 arr[insertPos] = temp; } }![]() /** *//** *//** *//** * 顯示添值部分的數(shù)組 * */ public void display() { System.out.print("現(xiàn)有元素有:"); for (int i = 0; i < currItemsCount; i++) { System.out.print(arr[i] + ","); } System.out.print("\n"); }![]() /** *//** *//** *//** * 顯示數(shù)組的所有子元素,包括添值和未添值部分 * */ public void displayAll() { System.out.print("所有元素有:"); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + ","); } System.out.print("\n"); }![]() /** *//** *//** *//** * 程序入口 * @param args */ public static void main(String[] args) { DynamicArray dArray = new DynamicArray(12);![]() dArray.add(1); dArray.add(2); dArray.add(3); dArray.add(4); dArray.add(5); dArray.display(); dArray.displayAll();![]() dArray.add(6); dArray.add(7); dArray.add(8); dArray.add(9); dArray.add(10); dArray.display(); dArray.displayAll();![]() dArray.add(11); dArray.add(12); dArray.add(13); dArray.add(14); dArray.add(15); dArray.display(); dArray.displayAll();![]() dArray.remove(3); dArray.display(); dArray.displayAll();![]() dArray.remove(0); dArray.display(); dArray.displayAll();![]() dArray.remove(10); dArray.display(); dArray.displayAll();![]() dArray.add(2); dArray.add(3); dArray.add(4); dArray.add(3); dArray.add(4); dArray.display(); System.out.print("已排序數(shù)組元素為:"); int[] arr = dArray.getSortedArr(); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + ","); } System.out.print("\n"); } } |
|
|