整形数组实用类,用于求两数组的并交差集
来源:百度文库 编辑:神马文学网 时间:2024/04/29 18:10:26
package com.sitinspring;
/** *//**
* 整形数组实用类,能求两数组的并交差集,不借助于集合类
* @author: sitinspring(junglesong@gmail.com)
* @date: 2008-6-24-下午10:13:33
*/
public final class IntegerArrayUtil{
// 私有构造函数,防止创建IntegerArrayUtil的实例
private IntegerArrayUtil(){
}
/** *//**
* 取得两数组并集
* @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();
}
/** *//**
* 取得两数组交集
* @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();
}
/** *//**
* 取得两数组差集
* @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在数组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;
}
/** *//**
* 显示数组元素
* @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("数组arr1为");
display(arr1);
System.out.print("数组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));
}
}
输出:
数组arr1为1,2,3,4,5,0,-1,-2,-3,-4,-5,
数组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,
动态数组类:
package com.sitinspring;
/** *//**
* 动态数组类,以数组为数据容器实现动态数组的功能
* @author: sitinspring(junglesong@gmail.com)
* @date: 2008-6-23-下午10:08:09
*/
public class DynamicArray {
/** *//** *//** *//**
* 用于存储数据的数组
*/
private int[] arr;
/** *//** *//** *//**
* 初始化大小
*/
private static final int initSize = 10;
/** *//** *//** *//**
* 当前元素个数
*/
private int currItemsCount = 0;
/** *//** *//** *//**
* 构造函数一,固定大小
*/
public DynamicArray() {
arr = new int[initSize];
}
/** *//** *//** *//**
* 构造函数二,指定大小
*/
public DynamicArray(int len) {
arr = new int[len];
}
/** *//** *//** *//**
* 取得位置在i的元素
*/
public int get(int i) {
if (i < currItemsCount) {
return arr[i];
}
return -999;
}
/** *//** *//** *//**
* 取得数组中已有元素的个数
* @return
*/
public int size() {
return currItemsCount;
}
/** *//** *//** *//**
* 添加一个元素到数组
* @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;
}
}
}
/** *//** *//** *//**
* 取得添值部分的数组
* @return
*/
public int[] getArr() {
int[] arrNew = new int[currItemsCount];
for (int i = 0; i < arrNew.length; i++) {
arrNew[i] = arr[i];
}
return arrNew;
}
/** *//** *//** *//**
* 取得已排序的数组
* @return
*/
public int[] getSortedArr(){
int[] arrSorted = getArr();
insertSort(arrSorted);
return arrSorted;
}
/** *//** *//** *//**
* 进行插入排序
* @param arr
*/
private static void insertSort(int[] arr) {
int i, temp;
// 插入位置
int insertPos;
for (i = 1; i < arr.length; i++) {
// 当前需要进入已排序队列的项
temp = arr[i];
insertPos = i;
// 向右移动
while (0 < insertPos && arr[insertPos - 1] >= temp) {
arr[insertPos] = arr[insertPos - 1];
--insertPos;
}
// 当前项该处于的位置
arr[insertPos] = temp;
}
}
/** *//** *//** *//**
* 显示添值部分的数组
*
*/
public void display() {
System.out.print("现有元素有:");
for (int i = 0; i < currItemsCount; i++) {
System.out.print(arr[i] + ",");
}
System.out.print("\n");
}
/** *//** *//** *//**
* 显示数组的所有子元素,包括添值和未添值部分
*
*/
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("已排序数组元素為:");
int[] arr = dArray.getSortedArr();
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + ",");
}
System.out.print("\n");
}
}
/** *//**
* 整形数组实用类,能求两数组的并交差集,不借助于集合类
* @author: sitinspring(junglesong@gmail.com)
* @date: 2008-6-24-下午10:13:33
*/
public final class IntegerArrayUtil{
// 私有构造函数,防止创建IntegerArrayUtil的实例
private IntegerArrayUtil(){
}
/** *//**
* 取得两数组并集
* @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();
}
/** *//**
* 取得两数组交集
* @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();
}
/** *//**
* 取得两数组差集
* @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在数组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;
}
/** *//**
* 显示数组元素
* @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("数组arr1为");
display(arr1);
System.out.print("数组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));
}
}
输出:
数组arr1为1,2,3,4,5,0,-1,-2,-3,-4,-5,
数组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,
动态数组类:
package com.sitinspring;
/** *//**
* 动态数组类,以数组为数据容器实现动态数组的功能
* @author: sitinspring(junglesong@gmail.com)
* @date: 2008-6-23-下午10:08:09
*/
public class DynamicArray {
/** *//** *//** *//**
* 用于存储数据的数组
*/
private int[] arr;
/** *//** *//** *//**
* 初始化大小
*/
private static final int initSize = 10;
/** *//** *//** *//**
* 当前元素个数
*/
private int currItemsCount = 0;
/** *//** *//** *//**
* 构造函数一,固定大小
*/
public DynamicArray() {
arr = new int[initSize];
}
/** *//** *//** *//**
* 构造函数二,指定大小
*/
public DynamicArray(int len) {
arr = new int[len];
}
/** *//** *//** *//**
* 取得位置在i的元素
*/
public int get(int i) {
if (i < currItemsCount) {
return arr[i];
}
return -999;
}
/** *//** *//** *//**
* 取得数组中已有元素的个数
* @return
*/
public int size() {
return currItemsCount;
}
/** *//** *//** *//**
* 添加一个元素到数组
* @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;
}
}
}
/** *//** *//** *//**
* 取得添值部分的数组
* @return
*/
public int[] getArr() {
int[] arrNew = new int[currItemsCount];
for (int i = 0; i < arrNew.length; i++) {
arrNew[i] = arr[i];
}
return arrNew;
}
/** *//** *//** *//**
* 取得已排序的数组
* @return
*/
public int[] getSortedArr(){
int[] arrSorted = getArr();
insertSort(arrSorted);
return arrSorted;
}
/** *//** *//** *//**
* 进行插入排序
* @param arr
*/
private static void insertSort(int[] arr) {
int i, temp;
// 插入位置
int insertPos;
for (i = 1; i < arr.length; i++) {
// 当前需要进入已排序队列的项
temp = arr[i];
insertPos = i;
// 向右移动
while (0 < insertPos && arr[insertPos - 1] >= temp) {
arr[insertPos] = arr[insertPos - 1];
--insertPos;
}
// 当前项该处于的位置
arr[insertPos] = temp;
}
}
/** *//** *//** *//**
* 显示添值部分的数组
*
*/
public void display() {
System.out.print("现有元素有:");
for (int i = 0; i < currItemsCount; i++) {
System.out.print(arr[i] + ",");
}
System.out.print("\n");
}
/** *//** *//** *//**
* 显示数组的所有子元素,包括添值和未添值部分
*
*/
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("已排序数组元素為:");
int[] arr = dArray.getSortedArr();
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + ",");
}
System.out.print("\n");
}
}
整形数组实用类,用于求两数组的并交差集
求子数组的最大和
使用MFC的数组类
指向数组的指针与多维数组
历史上的 Collection 类 ― 数组
求平均成绩使用二维数组
第三章 数组的解剖学
多维数组的指针变量
数组传参的问题
数组传参的问题
如何高效的遍历数组?
多维数组的指针变量
vb.net的多维数组
对多维数组的理解
指针与数组的异同
第三章 数组的解剖学
CSDN技术中心 第二章 再一次吃惊----数组的数组与多维数组的区别
第二章 再一次吃惊----数组的数组与多维数组的区别 - 飞天御剑流
程序员面试题精选(03)-求子数组的最大和
程序员面试题精选(03)-求子数组的最大和 - 涛声依旧 - 网易博客
指针数组和数组指针
第五章 指向数组的指针
关于java数组的深度思考
结构体零长度数组的作用