數組操作大全

/**
 * 數組操作類
 * @author Sking
 */

import java.util.LinkedHashSet;
import java.util.Set;

public class ArrayUtils {
	
	/**1.複製數組*/
	//System.arraycopy(from,fromIndex,to,toIndex,count);
	
	//Xxx代表long,int,short,char,byte,double,float,object,返回Xxx[]數組
	//Arrays.copyof(Xxx[] a,int len)
	//Arrays.copyOfRange(Xxx[] a,int from,int to)
	
	/**2.數組升序快速排序*/
	//Xxx代表long,int,short,char,byte,double,float,Object(實現Comparable接口),返回類型爲void
	//Arrays.sort(Xxx a[]);
	//Arrays.sort(Xxx a[],int fromIndex,int toIndex);
	
	//自定義函數,將數組從中間位置向兩邊排序展開
	/**
	 * 將指定數組從中間位置向兩邊排序展開,先左後右
	 * @param input 待排序數組
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static void sort(Comparable[] input){
		int n=input.length;
		Comparable[] output=new Comparable[n];
		int middle=n/2;
		Comparable[] temp=input;
		for(int i=n;i>1;i--){
			int maxPos=0;
			for(int j=0;j<i;j++)
				if(temp[j].compareTo(temp[maxPos])>0)
					maxPos=j;
			swap(temp,maxPos,i-1);
		}//將temp數組降序排序
		output[middle]=temp[0];//存放最大的元素
		int left=n/2-1;//左邊指針
		int right=n/2+1;//右邊指針
			for(int k=1;k<n;k+=2)
				output[left--]=temp[k];
			for(int m=2;m<n;m+=2)
				output[right++]=temp[m];
			System.arraycopy(output, 0, input, 0, n);
	}
	
	private static void swap(Object[] a,int i,int j){
		Object temp;
		temp=a[i];
		a[i]=a[j];
		a[j]=temp;	
	}
   

	/**3.數組二分查找*/
	//Xxx表示long,int,short,char,byte,double,float,object(實現了Comparable接口),返回索引位置
	//Arrays.binarySearch(Xxx a[],Xxx v);
	//Arrays.binarySearch(Xxx a[],int from,int to,Xxx v);
	
	/**4.填充數組*/
	//Xxx表示long,int,short,char,byte,double,float,Object,返回類型爲void
	//Arrays.fill(Xxx a[],Xxx v)
	//Arrays.fill(Xxx a[],int from,int to,Xxx v)
	
	/**5.比較數組是否相等
	 * @param <T>*/
	//Xxx表示long,int,short,char,byte,boolean,double,float,Object(實現了Comparable接口)
	//Arrays.equals(Xxx[] a,Xxx[] b)
	
	
	/**
	 * 6.判斷數組元素是否重複,T表示類型參數,
	 *       如果是內置類型使用對應的包裝類。
	 * @param a 輸入數組
	 * @return 如果數組不包含指定重複元素則返回true,否則false
	 */
	public static <T> boolean ArrayUnique(T[] a){
		int len=a.length;
		Set<T> set=new LinkedHashSet<T>();
		for(T t:a)
			set.add(t);
		if(len==set.size())
			return true;
		return false;
	}
	
	
	/**7.打印數組*/
	//Xxx代表long,int,short,char,byte,boolean,double,float,Object
	//打印格式爲:[元素1,元素2,元素3...]
	//Arrays.toString(Xxx[] a)
	
	//字符數組轉換爲字符串
	//String.copyValueOf(char[] data[,int offset,int count])
	//String.valueOf(char[] data[, int offset, int count])
	
	//自定義函數,使用指定的分割標誌符鏈接數組爲字符串
	/**
	 * 使用指定的分割標誌鏈接數組爲字符串,
	 *       如果未指定分隔符則默認使用逗號。
	 * @param a 待鏈接數組
	 * @param separator 分割標誌符,沒有設置則使用逗號
	 * @return  使用指定的分割標誌鏈接數組得到的字符串
	 */
	public static <T> String ArrayToString(T[] a,String separator){
		separator=(separator==null?",":separator);
		StringBuffer sb=new StringBuffer();
		for(T t:a)
			sb.append(t.toString()).append(separator);
		sb.delete(sb.lastIndexOf(separator), sb.length());
		return sb.toString();
	}
	
	/**8.反轉數組*/
	//自定義反轉數組函數
	/**
	 * 反轉指定數組
	 * @param a 待反轉數組
	 */
	public static <T> void ArrayReverse(T[] a){
		int len=a.length;
		for(int i=0,j=len-1;i<j;i++,j--){
			T temp=a[i];
			a[i]=a[j];
			a[j]=temp;
		}
	}
	
	/**9.求數組最值*/
	//見編程問題--數組問題--數組最值.java
	
	/**10.一維數組最大字段和問題*/
	//見編程問題--數組問題--一維最大字段和.java
	
	/**11.指定索引插入元素*/
	//自定義函數:實現指定索引插入元素到數組中
	/**
	 * 指定索引插入元素到數組中
	 * @param a 指定數組
	 * @param value 待插入元素
	 * @param index 新元素插入位置索引
	 * @return 插入後的新數組
	 * @throws Exception 索引不合法
	 */
	public static Object[] ArrayInsert(Object[] a,Object value,int index) throws Exception{
		if(index<0||index>a.length)
			throw new Exception("索引不合法!");
		Object[] result=new Object[a.length+1];
		System.arraycopy(a, 0, result, 0, index);
		result[index]=value;
		System.arraycopy(a, index, result, index+1,a.length-index);
		return result;
	}
	
	/**12.指定索引刪除元素*/
	//自定義函數:實現指定索引刪除元素並返回刪除後的數組
	/**
	 * 指定索引刪除元素並返回刪除後的數組
	 * @param a 指定數組
	 * @param index 待刪除元素的索引
	 * @return 刪除後的數組
	 * @throws Exception 索引不合法
	 */
	public static Object[] ArrayDelete(Object[] a,int index)throws Exception{
		if(index<0||index>=a.length)
			throw new Exception("索引不合法!");
		Object[] result=new Object[a.length-1];
		System.arraycopy(a, 0, result, 0, index);
		System.arraycopy(a, index+1, result, index, a.length-index-1);
		return result;
	}
	
	
	public static void main(String[] args){	
	}
}

發佈了33 篇原創文章 · 獲贊 14 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章