`

想写一个好的队列加载器,没想到FLASH 自带的HASHMAP 实在太慢了

阅读更多
我们都知道在高数据量的时候, 用SHIFT来剔除对象, 或者用SPLICE 会很慢
因此我想写一个好的队列加载器,
但是没想到, HASHMAP如此之慢
唉 只能放弃这个思路了, 还不如简单的ARRAY的队列快
唉 杯具~~

package com
{
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.SecurityErrorEvent;
	import flash.net.URLRequest;
	import flash.utils.Dictionary;
	/**
	 * 队列加载器, 失败啊, 没想到HASHMAP, 如此之慢
	 * @author guwanyuan
	 * 
	 */	
	public class QueenLoader extends Sprite
	{
		/**
		 * 清理后的标记URL地址 
		 */		
		public static const CLEAR_URL:String = "";
		
		public function QueenLoader()
		{
			super();
			urlDic = new Dictionary();
		}
		
		public function addLoaderItem(url:String):void
		{
			var index:int = offset + loaderList.length + list.length;
			urlDic[url] = index;
			list.push(url);
			if(!isLoader)
				nextLoader();
		}
		
		public function deleteLoaderItem(url:String, cancel:Boolean = false):void
		{
			trace("delete", url)
			var index:int = urlDic[url];
			var idx:int = index - offset;
			var loaderlistLeng:int = loaderList.length;
			if(idx < loaderlistLeng)
			{
				var leng:int = loaderlistLeng - idx;
				loaderList[leng] = CLEAR_URL;
			}
			else
			{
				var listIndex:int = idx - loaderlistLeng;
				list[listIndex] = CLEAR_URL;
			}
		}
		
		private function startLoad(url:String):void
		{
			trace(url);
			isLoader = true;
			var loader:Loader = new Loader();
			loader.load(new URLRequest(url));
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);
			loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIoError);
			loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
		}
		
		private function onSecurityError(e:SecurityErrorEvent):void
		{
			isLoader = false;
			nextLoader();
		}
		
		private function onIoError(e:IOErrorEvent):void
		{
			isLoader = false;
			nextLoader();
		}
		
		private function loaderComplete(e:Event = null):void
		{
			if(e)
				LoaderInfo(e.target).removeEventListener(Event.COMPLETE, loaderComplete);
			isLoader = false;
			nextLoader();
		}
		
		private function nextLoader():void
		{
			var url:String = CLEAR_URL;
			while(url == CLEAR_URL)
			{
				reverseList();
				url = loaderList.pop();
				offset++;
			}
			if(url)
				startLoad(url);
		}
		
		private function reverseList():void
		{
			if(loaderList.length <= 0)
			{
				loaderList = list.reverse();
				list = [];
			}
		}
		
		private var currentIndex:int = 0;
		private var isLoader:Boolean = false;
		private var offset:int = 0;
		private var urlDic:Dictionary;
		private var list:Array = [];
		private var loaderList:Array = [];
	}
}
分享到:
评论

相关推荐

    用HashMap写的一个小Demo用来写游戏排名的一种方法

    在这个"用HashMap写的一个小Demo用来写游戏排名的一种方法"的示例中,我们很可能会看到如何利用HashMap来组织游戏分数并进行排序,以实现一个简单的游戏排名系统。 HashMap的特点在于它的键(key)是唯一的,每个键...

    hashmap面试题_hashmap_

    2. 可空性:键和值都可以为null,但一个HashMap只能有一个键为null的条目。 3. 默认容量:16,负载因子0.75,当容量达到负载因子乘以当前容量时,会发生扩容。 四、HashMap面试题解析 1. HashMap的初始容量和扩容...

    用HashMap模拟一个网上购物车

    在本实验中,我们通过使用Java语言中的`HashMap`来模拟一个简单的网上购物车系统。该项目的主要目的是熟悉Java集合框架中的`HashMap`类,并了解如何利用它来存储、管理和检索数据。此外,我们还将学习如何使用`...

    一个基于js的HashMap

    下面我们将详细讨论如何在JavaScript中创建一个基于js的HashMap以及它的相关知识点。 首先,HashMap的核心在于其内部实现的哈希函数,它能将键转换为唯一的哈希码,使得我们可以快速定位到存储的值。在JavaScript中...

    一个delphi的hashmap源代码

    在这个特定的案例中,我们有一个名为"一个delphi的hashmap源代码"的压缩包,其中包含三个不同的哈希表实现:TIntegerHashList、TStringHashList和TObjectHashList。这些类分别针对整数、字符串和对象类型的键进行了...

    HashMap的数据结构

    HashMap是Java编程语言中一个非常重要的数据结构,它属于集合框架的一部分,主要用于存储键值对(Key-Value)数据。HashMap在内部实现上基于哈希表,也称为散列表,它提供了一种快速查找、插入和删除数据的方法,...

    HashMap介绍和使用

    这里的`Entry`是HashMap内部的一个静态类,用于存储键值对以及下一个节点的引用,构成链表: ```java static class Entry,V&gt; implements Map.Entry,V&gt; { final K key; V value; final int hash; Entry,V&gt; next;...

    全手写HashMap精简版Demo 可直接允许查看效果

    HashMap通过链表来解决这个问题,每个数组元素(桶)实际上是一个链表,相同的哈希值的键值对会被链接在一起。在Java 8之后,如果链表长度超过一定阈值(通常是8),HashMap会将链表转换为红黑树以进一步提高查找...

    flex HashMap

    flex 封装的一个HashMap。使用挺方便的。(免积分下载)

    Hashmap详解

    HashMap 是一种常用的数据结构,在 Java 中,它是一个数组和链表的结合体。下面我们将深入探讨 HashMap 的数据结构、 put 方法的实现细节和 Hash 码的计算过程。 HashMap 的数据结构 HashMap 的数据结构可以分为两...

    hashmap实现原理

    默认的`hashCode()`方法返回的是对象的内存地址,而`equals()`仅检查两个对象是否指向同一个实例。如果仅重写`equals()`而不重写`hashCode()`,可能会导致查找效率降低,甚至无法正确获取存储的值。 HashMap的内部...

    hashMap和hashTable的区别

    如果多个线程同时访问一个 `HashMap` 实例,而其中至少一个线程修改了该 `HashMap` 结构,则必须保持外部同步。 - **HashTable**:是线程安全的,即同步的。它的所有公共方法都是 `synchronized` 的,这意味着可以...

    关于如何解决HashMap线程安全问题的介绍

    在Java编程中,HashMap是一个非常常用的集合类,用于存储键值对数据。然而,它存在一个重要的特性,那就是线程不安全。理解这个问题并找到解决方案是每个Java开发者必须掌握的知识。 HashMap线程不安全的原因主要...

    HashMap的一个数据结构

    HashMap的一个数据结构 锁升级:锁升级过程 resize的过程在开发中 怎么保证容器它线程安全后就是数据插入过程使用的头插法 但是头插法会造成一些问题等等等等的那个等等的那个等等的那个等等的那个等等的那个等等的...

    hashMap利用iterator迭代器迭代元素方法

    在Java编程语言中,`HashMap`是一个非常常用的数据结构,它实现了`Map`接口,用于存储键值对。`HashMap`使用哈希表实现,提供快速的插入、删除和查找操作。当我们需要遍历`HashMap`中的所有元素时,通常会使用`...

    java HashMap原理分析

    Java HashMap是一种基于哈希表的数据结构,它的存储原理是通过将Key-Value对存储在一个数组中,每个数组元素是一个链表,链表中的每个元素是一个Entry对象,Entry对象包含了Key、Value和指向下一个Entry对象的引用。...

    HashMap与HashTable区别

    如果多个线程同时访问一个`HashMap`实例,且至少有一个线程修改了该`HashMap`,则必须通过外部同步来保证线程安全。例如,可以通过将`HashMap`对象包装在一个`Collections.synchronizedMap()`返回的对象中来实现这...

    HashMap CRUD操作

    在本教程中,我们将深入探讨如何使用HashMap来实现产品的创建(Create)、读取(Read)、更新(Update)和删除(Delete),这对于初学者来说是一个很好的实践案例。 **1. HashMap基础** HashMap在内部使用了哈希表...

    HashMap和HashTable的区别和不同

    - **HashMap**: 相较之下,`HashMap`不是一个线程安全的类。如果多个线程并发地访问并修改`HashMap`,则可能导致数据不一致性问题。为了在多线程环境中安全地使用`HashMap`,开发者需要自己负责同步,例如使用`...

Global site tag (gtag.js) - Google Analytics