`

ArrayUtils

阅读更多

 

/*
 Copyright aswing.org, see the LICENCE.txt.
*/
 
package com.xxxx.utils{
	
	/**
	 * Utils functions about Array.
	 * @author iiley
	 */
	public class ArrayUtils{
		
		/**
		 * Call the operation by pass each element of the array once.
		 * <p>
		 * for example:
		 * <pre>
		 * //hide all component in vector components
		 * ArrayUtils.each( 
		 *     components,
		 *     function(c:Component){
		 *         c.setVisible(false);
		 *     });
		 * <pre>
		 * @param arr the array for each element will be operated.
		 * @param the operation function for each element
		 * @see Vector#each
		 */
		public static function each(arr:Array, operation:Function):void{
			for(var i:int=0; i<arr.length; i++){
				operation(arr[i]);
			}
		}
		
		/**
		 * Sets the size of the array. If the new size is greater than the current size, 
		 * new undefined items are added to the end of the array. If the new size is less than 
		 * the current size, all components at index newSize and greater are removed.
		 * @param arr the array to resize
		 * @param size the new size of this vector 
		 */
		public static function setSize(arr:Array, size:int):void{
			//TODO test this method
			if(size < 0) size = 0;
			if(size == arr.length){
				return;
			}
			if(size > arr.length){
				arr[size - 1] = undefined;
			}else{
				arr.splice(size);
			}
		}
		
		/**
		 * Removes the object from the array and return the index.
		 * @return the index of the object, -1 if the object is not in the array
		 */
		public static function removeFromArray(arr:Array, obj:Object):int{
			var i:int = arr.indexOf(obj);
			if (i != -1)
				arr.splice(i, 1);
			return i;
		}
		
		public static function removeAllFromArray(arr:Array, obj:Object):void{
			for(var i:int=0; i<arr.length; i++){
				if(arr[i] == obj){
					arr.splice(i, 1);
					i--;
				}
			}
		}
		
		public static function removeAllBehindSomeIndex(array:Array , index:int):void{
			if(index <= 0){
				array.splice(0);
			}
			else {
				array.splice(index + 1);
			}
		}
		
		public static function cloneArray(arr:Array):Array{
			return arr.concat();
		}
		
		public static function deepClone(a:Array):Array {
			var r:Array = new Array();
			for each (var obj:Object in a) {
				if (obj.hasOwnProperty("clone")) {
					obj = obj.clone();
				}
				r.push(obj);
			}
			return r;
		}
		
		/**
		 * 
		 * 全闭区间 [start, end] 
		 * 
		 */	
		public static function copyArrayByRange(dst:Array, src:Array, start:int, end:int):Boolean {
			if (dst == null || src == null)
				return false;
			
			var l:int = src.length;
			if (l == 0 || l <= end)
				return false;
			
			dst.splice(0);
			for (var i:int = start; i <= end; ++i) {
				dst.push(src[i]);
			}
			return true;
		}
		
		/**
		 *mix the array 
		 * @param array
		 */	
		public static function mixArray(array:Array):void{
			array.sort(function(n1:*, n2:*):Number{
				var r:Number = Math.random()*1;
				return r>0.5?1:-1;
			});
		}
		
		public static function swap(array:Array, i:int, j:int):void {
			var t:Object = array[i];
			array[i] = array[j];
			array[j] = t;
		}
		
		public static function bubbleSort(array:Array, fnCompare:Function):void {
			var c:int = array.length - 1;
			for (var i:int = 0; i < c; ++i) {
				var bSwapped:Boolean = false;
				for (var j:int = 0; j < c - i; ++j) {
					if (fnCompare(array[j + 1], array[j])) {
						swap(array, j, j + 1);
						bSwapped = true;
					}
				}
				if (!bSwapped) {
					break;
				}
			}
		}
		
		public static function quickSort(array:Array, fnCompare:Function):void {
			doQuickSort(array, fnCompare, 0, array.length - 1);
		}
		
		private static function doQuickSort(array:Array, fnCompare:Function, bottom:int, top:int):void {
			if (top > bottom) {
				var piv:int = bottom;
				var k:int = bottom + 1;
				var r:int = top;
				var pivObj:Object = array[piv];
				while (k != r /*k < r*/) {
					if (fnCompare(array[k], pivObj)) {
						++k;
					}
					else {
						swap(array, k, r--);
					}
				}
				if (fnCompare(array[k], pivObj)) {
					swap(array, k, bottom);
					doQuickSort(array, fnCompare, bottom, k - 1);
					doQuickSort(array, fnCompare, r + 1, top);
				}
				else {
					if (top - bottom > 1) {
						--k;
						swap(array, k, bottom);
						doQuickSort(array, fnCompare, bottom, k - 1);
						doQuickSort(array, fnCompare, k + 1, top);
					}
				}
			}
		}
		
		public static function selectSort(array:Array, fnCompare:Function):void {
			var l:int = array.length;
			for (var i:int = 1; i < l; ++i) {
				var iMin:int = i - 1;
				var minCh:Object = array[iMin];
				for (var j:int = i; j < l; ++j) {
					var ch:Object = array[j];
					if (fnCompare(ch, minCh)) {
						iMin = j;
						minCh = ch;
					}
				}
				if (iMin != (i - 1)) {
					swap(array, iMin, i - 1);
				}
			}
		}
		
		public static function heapSort(array:Array, fnCompare:Function):void {
			for (var i:int = array.length - 1; i > 0; --i) {
				heapTree(array, fnCompare, i, i);
			}
		}
		
		private static function heapTree(array:Array, fnCompare:Function, iRootIndex:int, iTopIndex:int):void {
			if (iRootIndex > iTopIndex) {
				return;
			}
			
			var iLeftIndex:int = 0;
			var iRightIndex:int = 1;
			if (iRootIndex < iTopIndex) {
				iLeftIndex = (iRootIndex + 1) * 2;
				iRightIndex = iLeftIndex + 1;
			}
			
			if (iLeftIndex < iTopIndex) {
				var chRoot:Object = array[iRootIndex];
				var chLeft:Object = array[iLeftIndex];
				if (iRightIndex < iTopIndex) {
					var chRight:Object = array[iRightIndex];
					if (fnCompare(chRight, chLeft)) {
						if (fnCompare(chRoot, chLeft)) {
							swap(array, iLeftIndex, iRootIndex);
						}
					}
					else {
						if (fnCompare(chRoot, chRight)) {
							swap(array, iRightIndex, iRootIndex);
						}
					}
					
					heapTree(array, fnCompare, iLeftIndex, iTopIndex);
					heapTree(array, fnCompare, iRightIndex, iTopIndex);
					
					chRoot = array[iRootIndex];
					chLeft = array[iLeftIndex];
					chRight = array[iRightIndex];
					if (fnCompare(chRight, chLeft)) {
						if (fnCompare(chRoot, chLeft)) {
							swap(array, iLeftIndex, iRootIndex);
						}
					}
					else {
						if (fnCompare(chRoot, chRight)) {
							swap(array, iRightIndex, iRootIndex);
						}
					}
				}
				else {
					if (fnCompare(chRoot, chLeft)) {
						swap(array, iLeftIndex, iRootIndex);
					}
				}
			}
			else {
				
			}
		}
	}
}

 

分享到:
评论

相关推荐

    commons.lang ArrayUtils类的中文api

    commons.lang ArrayUtils类的中文api 主要扩展了对java.lang包下对数组的操作!

    ArrayUtils等6个文件.zip

    ArrayUtils等6个文件.zip

    Java字符串加密使用的一个jar包 commons-lang3-3.1.jar下载

    org.apache.commons.lang3.ArrayUtils.class org.apache.commons.lang3.BitField.class org.apache.commons.lang3.CharUtils.class org.apache.commons.lang3.ClassUtils.class org.apache.commons.lang3.Validate....

    java 工具类 lang3 jar包

    java 工具类 lang3 jar包 StringUtils ArrayUtils SystemUtils

    org.apache.commons.lang jar包下载

    META-INF/MANIFEST.MFMETA-INF/LICENSE.txtMETA-INF/NOTICE.txtorg.apache.commons.lang.ArrayUtils.class org.apache.commons.lang.BitField.class org.apache.commons.lang.BooleanUtils.class org.apache....

    arrut:ArrayUtils

    ArrayUtils arrut.isEmpty var array = [ "a" , "b" , "c" ] ; var empty = arrut . isEmpty ( array ) ; // false 阿鲁特克隆 var array = [ "a" , "b" , "c" ] ; var clone = arrut . clone ( array ) ; // [...

    org.apache.commons.lang包

    Apache Commons Lang资源包,下载解压缩后,可获得api文档,源码,jar包,用于开发

    commons-Collections最常用类介绍.pdf

    的数据结构问题,为什么不自己用数组或者自定义的链表来做,再加上JakartaCommons的Lang提供的ArrayUtils、StringUtils等,已经基本够 了,性能可以保证,那么还要这个CollectionsAPI干嘛。当然,说到这里有些偏激了...

    commons-lang

    commons-lang包中对我们有用的类主要有: 1.StringUtils 该类主要提供对字符串的操作,对null是安全的,主要提供了字符串查找,替换,分割,去空白,去掉非法...8.ArrayUtils 提供了数组的复制,查找,获取子数组,反转等功能

    自己收集整理的一些常用的工具类

    ArrayUtils 数组工具类,提供一些有关数组的便捷方法 ByteUtils 字节工具类,提供一些有关字节的便捷方法 CheckAdapter 选择适配器 CheckingUtils 提供常用数据验证的工具类,不符合的话就抛异常 Countdown 倒计时器...

    Android静默安装常用工具类

    源码可见ArrayUtils.java,更多方法及更详细参数介绍可见ArrayUtils Api Guide。 13、ImageUtils 图片工具类,可用于Bitmap, byte array, Drawable之间进行转换以及图片缩放,目前功能薄弱,后面会进行增强。如: ...

    commons-lang3-3.1 API

    ArrayUtils – 用于对数组的操作,如添加、查找、删除、子数组、倒序、元素类型转换等; BitField – 用于操作位元,提供了一些方便而安全的方法; BooleanUtils – 用于操作和转换boolean或者Boolean及相应的数组;...

    一个简单的开源Android工具类库

    ArrayUtils Array Unility Class AssetsUtils Assets Unility Class BASE64Utils Base64 Unility Class BitmapUtils Bitmap Unility Class BlurUtils Blur Unility Class ByteUtils Byte Unility Class ...

    commons-lang.jar

    META-INF/MANIFEST.MFMETA-INF/LICENSE.txtMETA-INF/NOTICE.txtorg.apache.commons.lang.ArrayUtils.class org.apache.commons.lang.BitField.class org.apache.commons.lang.BooleanUtils.class org.apache.commons...

    org.apache.commons.lang jar包下载(commons-lang3-3.1.jar)

    META-INF/MANIFEST.MFMETA-INF/LICENSE.txtMETA-INF/NOTICE.txtorg.apache.commons.lang.ArrayUtils.class org.apache.commons.lang.BitField.class org.apache.commons.lang.BooleanUtils.class org.apache....

    Apache Commons 官方最近所有的jar包

    apache commons jar(commons所有的jar包,从官网下载提供给大家) 因为涉及jar太多,包括有源代码,需要的请自取。

    commons-lang3-3.2.1.jar 架包下载

    commons-lang3-3.2.1.jar下载,可用于ArrayUtils等工具使用

    我积攒的java工具类 基本满足开发需要的工具类

    D:\002 我的工具类\002 数组\ArrayUtils.java D:\002 我的工具类\003 日期 D:\002 我的工具类\003 日期\DateUtil.java D:\002 我的工具类\004 加密 D:\002 我的工具类\004 加密\DESUtils.java D:\002 我的工具类\004...

    picu:PICU是Carbon的公用事业

    var arrayUtils = require ( 'picu' ) . array ; 之间 在每个单元格之间插入一个新值 var a = [ 1 , 2 , 3 ] ; var b = arrayUtils . inbetween ( a , 'x' ) ; // b -&gt; [1, 'x', 2, 'x', 3] .shuffle 随机排列...

Global site tag (gtag.js) - Google Analytics