`
mengdejun
  • 浏览: 412881 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

asp hashmap,arraylist实现

    博客分类:
  • Asp
阅读更多
<%
Class HashMap
	 dim arr()
	 dim arr_len
	 
	 '构造函数
	 private Sub Class_Initialize
	 '其中 arr(0,n)为key,arr(1,n)为value
	  arr_len = 0
	  redim arr(1,arr_len)
	 End Sub
	 
	 '========================
	 '*put方法 往MAP中插入键值对,如果Key存在则覆盖
	 '@k 键值key
	 '@v key对应的value值
	 '========================
	 public Sub put(k,v)
	  dim is_update
	  is_update = false
	  arr_len = ubound(arr,2)
	  for i=0 to arr_len-1
	   if k=arr(0,i) then
		arr(1,i) = v
		is_update = true
		exit for
	   end if
	  next
	  if not is_update then
		arr_len = arr_len +1
		redim preserve arr(1,arr_len)
		arr(0,arr_len-1) = k
		arr(1,arr_len-1) = v
	  end if
	 End Sub
	 
	 '========================
	 '*getv方法 通过key值获取对应的value
	 '@k 键值key
	 '========================
	 public Function getv(k)
	  dim v
	  for i=0 to arr_len
	   if k=arr(0,i) then
		v = arr(1,i)
		exit for
	   end if
	  next
	  getv = v
	 End Function
	 
	 '========================
	 '*keys方法 获取Map中所有的KEY,以数组形式返回
	 '========================
	 public Function keys()
	  dim v()
	  Redim v(arr_len)
	  for i=0 to arr_len-1
	   v(i) = arr(0,i)
	  next
	  keys = v
	 End Function
	
	 '========================
	 '*values方法 获取Map中所有的Value,以数组形式返回
	 '========================
	 public Function values()
	  dim v()
	  Redim v(arr_len)
	  for i=0 to arr_len-1
	  	 v(i) = arr(1,i)
	  next
	  values = v
	 End Function
	
	 '========================
	 '*remove方法 从MAP中移除指定key的键值对
	 '@k 键值key
	 '========================
	 public Sub remove(k)
	  arr_len = ubound(arr,2)
	  for i=0 to arr_len
		   if k=arr(0,i) then
				v = arr(1,i)
					for k = i to arr_len-1
						 arr(0,k) = arr(0,k+1)
						 arr(1,k) = arr(1,k+1)
						 next
						 arr_len = arr_len - 1
						 redim preserve arr(1,arr_len)
					exit for
		   end if
	  next
	 End Sub
	 
	 '========================
	 '*putAll 将源HashMap的所有值添加到当前对象中,如果存在重复key值将覆盖原有值
	 '@map 源HashMap
	 '========================
	 public Function putAll(map)
		  if typeName(map)<>"HashMap" then
		   	response.Write "putAll只能存放HashMap"
		  else
			   for i=0 to map.length-1
					put map.keys()(i),map.values()(i)
			   next
		  End If
	 End Function
	 
	 '========================
	 '*length属性 Map中的键值对数
	 '========================
	 public property get length()
	  length = arr_len
	 End property
	 
	 '========================
	 '*removeAll方法 移除MAP中所有值
	 '========================
	 public Sub removeAll()
	  arr_len = 0
	  redim arr(1,1)
	 End Sub
	 
End Class
%>

  

<%
'***************ArrayList属性***************
'ArrayList.Length:数组长度
'***************ArrayList方法***************
'---数组添加:
'ArrayList.Add(v):在ArrayList尾部添加一个元素
'ArrayList.AddArray(arr):在ArrayList尾部附加一个数组
'ArrayList.Insert(index,v):在ArrayList的index处插入一个值,原先的index和之后的值都往后移
'ArrayList.InsertArray(index,arr):在ArrayList的index处插入一个数组,原先的index和之后的值都往后移
'---数组更新:
'ArrayList.Update(index,v):更新索引为index处的值
'---数组删除:
'ArrayList.Remove(v):从ArrayList中删除第一个匹配项,注意是第一个,将会得到一新的数组
'ArrayList.RemoveAt(index):移除ArrayList的指定索引处的元素,将会得到一新的数组
'ArrayList.Splice(m,n):从一个数组中移除从索引m到索引n的一段元素,并返回这段移除的数组
'ArrayList.Clear()清空数组,数组将变为空,长度Length=0
'---数组查找:
'ArrayList.IndexOf(v):查找,返回ArrayList第一个匹配项的索引。没找到返回-1。
'ArrayList.LastIndexOf(v):返回ArrayList的最后一个匹配项的索引。没找到返回-1。
'---返回数组中的值:
'ArrayList.GetValue(index)取得ArrayList某个索引的值
'ArrayList.Slice(m,n)返回ArrayList从m到n的一段数组
'ArrayList.GetArray()返回整个Array数组
'---数组其他操作:
'ArrayList.Reverse()将整个 ArrayList 中元素的顺序反转
'ArrayList.Implode(separator)返回字符串值,元素由指定的分隔符分隔开来
'******************************/
Class ArrayList
        Private arrList'//内部数组
    Private arrLength'//记录数组的长度
    
    Private Sub Class_Initialize()
        arrList=Array()
        arrLength=0
    End Sub
    
    Private Sub Class_Terminate()
        Erase arrList
        End Sub
    
    '//数组长度,只读
    Public Property Get Length
        Length=arrLength
    End Property
    
    '//取得某个索引的值
    Public Function GetValue(index)
        On Error Resume Next
        GetValue=arrList(index)
        If Err Then showErr "ArrayList.GetValue()"&Err.Description:Err.Clear:Exit Function
    End Function
    
        '//返回整个Array数组
        Public Function GetArray()
        GetArray=arrList
    End Function
    
    '//添加元素,将值添加到ArrayList的结尾处
    Public Sub Add(v)
            ReDim Preserve arrList(arrLength)
        arrList(arrLength)=v
        arrLength=arrLength+1
    End Sub
    '//将数组添加到ArrayList的结尾处
    Public Sub AddArray(arr)
        If Not IsArray(arr) Then showErr "参数不是数组(arr):ArrayList.AddArray()":Exit Sub
        Dim I,L,J
        On Error Resume Next
            If arrLength = 0 Then '//如果ArrayList为空则直接附值
            arrList=arr
            arrLength=arrLength+UBound(arr)+1
        Else
                L=arrLength+UBound(arr)'//新的数组长度
            J=0
                ReDim Preserve arrList(L)
            For I = arrLength To L
                arrList(I)=arr(J)
                J=J+1
            Next
            arrLength=arrLength+UBound(arr)+1
        End If
        If Err Then showErr "ArrayList.AddArray()"&Err.Description:Err.Clear:Exit Sub
        
    End Sub
    '//将元素插入ArrayList的指定index索引处,原有的arrList(index)及后面的元素都往后排
    Public Sub Insert(index,v)
        Dim I,v2
        If index<arrLength And index>=0 Then
            ReDim Preserve arrList(arrLength)
        arrLength=arrLength+1
        For I = index To arrLength - 1
            v2=arrList(I)'//交换值
            arrList(I)=v
            v=v2
        Next
        Else
                showErr "下标越界:ArrayList.Insert()"
        End If
    End Sub
    '//将一组数组插入到指定的index处
    Public Sub InsertArray(index,arr)
        If index = "" Or Not IsNumeric(index) Then 
            showErr "非法的参数:ArrayList.InsertArray()":Exit Sub
        End If
        If index < 0 Or index > arrLength-1 Then
            showErr "下标越界:ArrayList.InsertArray()":Exit Sub
        End If
        If Not IsArray(arr) Then showErr "参数不是数组:ArrayList.InsertArray()":Exit Sub
        Dim I,L1,L2,J:J=0
        On Error Resume Next
        L1=UBound(arr)
        L2=arrLength+L1
        ReDim Preserve arrList(L2)
        For I = arrLength -1 To index Step -1
            arrList(I+L1+1)=arrList(I)'//把index之后的值往后移
        Next
        For I = index To index+L1
            arrList(I)=arr(J)
        J=J+1
        Next
        If Err Then showErr "ArrayList.InsertArray()"&Err.Description:Err.Clear:Exit Sub
        arrLength=arrLength+L1+1'//新的数组长度
    End Sub
    '//更新数组中索引为index的对应值
    '//by xilou 39949376
    Public Sub Update(index,v)
        If index = "" Or Not IsNumeric(index) Then 
            showErr "非法的参数(index):ArrayList.Update()":Exit Sub
        End If
        If index < 0 Or index > arrLength-1 Then
            showErr "下标越界(index):ArrayList.Update()":Exit Sub
        End If
        arrList(index)=v
    End Sub
    
    '//从ArrayList中删除第一个匹配项,注意是第一个,将会得到一新的数组
    Public Sub Remove(v)
        Dim I,index
        index = -1 '//第一个匹配的索引
        For I = 0 To arrLength - 1
            If arrList(I)=v Then index = I : Exit For
        Next
        If index <> -1 Then
            For I = index To arrLength - 2
            arrList(I) = arrList(I+1)'//值向前填充
        Next
        ReDim Preserve arrList(arrLength-1)'//收缩数组
        arrLength = arrLength - 1
        End If
    End Sub
    '//移除ArrayList的指定索引处的元素,将会得到一新的数组
    Public Sub RemoveAt(index)
        If index = "" Or Not IsNumeric(index) Then 
            showErr "非法的参数(index):ArrayList.RemoveAt()":Exit Sub
        End If
        If index < 0 Or index > arrLength-1 Then
            showErr "下标越界(index):ArrayList.RemoveAt()":Exit Sub
        End If
        If index > 0 Then
            For I = index To arrLength - 2
            arrList(I) = arrList(I+1)'//值向前填充
            Next
            ReDim Preserve arrList(arrLength-1)'//收缩数组
            arrLength = arrLength - 1
        End If
    End Sub
    '//从一个数组中移除从索引m到索引n的一段元素,并返回这段移除的数组
    Public Function Splice(m,n)
        If m = "" Or n = "" Or Not IsNumeric(m) Or Not IsNumeric(n) Then 
            showErr "非法的参数(m,n):ArrayList.Splice()":Exit Function
        End If
        If m < 0 Or m > arrLength-1 Or n < 0 Or n > arrLength-1 Then
            showErr "下标越界(m,n):ArrayList.Splice()":Exit Function
        End If
        Dim newArr,x,L,I,J
        newArr=Array()
        If m > n Then x=m:m=n:n=x '//交换数值
        L=n-m
        ReDim Preserve newArr(L)
        For I = m To n
            newArr(J)=arrList(I)'要移除的元素
        J=J+1
        Next
        '//把n后面的元素的值移前
        For I = (n+1) To arrLength -1
            arrList(I-L-1)=arrList(I)
        Next
        arrLength=arrLength-L-1
        ReDim Preserve arrList(arrLength)
        Splice=newArr
    End Function
    '//清空数组,数组将变为空,长度Length=0
    Public Sub Clear()
        Erase arrList
        arrLength=0
    End Sub
    '//将整个 ArrayList 中元素的顺序反转
    Public Sub Reverse()
        Dim L,I,J,v
        J=arrLength-1
            If arrLength > 0 Then
            L=Int(arrLength/2)
        For I = 0 To L-1
            v=arrList(I)
            arrList(I)=arrList(J)
            arrList(J)=v
            J=J-1
        Next
        End If
    End Sub
    '//返回字符串值,其中包含了连接到一起的数组的所有元素,元素由指定的分隔符分隔开来
    Public Function Implode(separator)
        Implode=Join(arrList,separator)
    End Function
    '//返回ArrayList从m到n的一段数组
    Public Function Slice(m,n)
        If m = "" Or n = "" Or Not IsNumeric(m) Or Not IsNumeric(n) Then 
            showErr "非法的参数:ArrayList.Slice()":Exit Function
        End If
        If m < 0 Or m > arrLength-1 Or n < 0 Or n > arrLength-1 Then
            showErr "下标越界:ArrayList.Slice()":Exit Function
        End If
        Dim I,J,newArr()
        J=0
        If m<=n Then
            ReDim Preserve newArr(n-m)
        For I = m To n
            newArr(J)=arrList(I)
            J=J+1
        Next
        Else
            ReDim Preserve newArr(m-n)
        For I = n To m
            newArr(J)=arrList(I)
            J=J+1
        Next
        End If
        Slice=newArr
        Erase newArr
    End Function
    
    '//查找,返回ArrayList第一个匹配项的从零开始的索引。没找到返回-1。
    '//by xilou 39949376
    Public Function IndexOf(v)
        Dim I
        For I = 0 To arrLength - 1
        If arrList(I)=v Then IndexOf=I:Exit Function
        Next
        IndexOf=-1
    End Function
    '//返回ArrayList的最后一个匹配项的从零开始的索引。没找到返回-1。
    Public Function LastIndexOf(v)
        Dim I
        If arrLength=0 Then
            LastIndexOf=-1:Exit Function
        Else
            For I = (arrLength-1) To 0 Step -1
            If arrList(I)=v Then LastIndexOf=I:Exit Function
            Next
        End If
        LastIndexOf=-1
    End Function
    
    '//显示错误
    Private Sub showErr(errInfo)
        Response.Write "<div id=""ERRORINFO"" style=""font-size:12px;color:#990000;font-family:""新宋体"", Arial"">"
        Response.Write errInfo
        Response.Write "</div>"
        Response.End()
    End Sub
End Class
%>

  

分享到:
评论

相关推荐

    图书管理系统asp.net -java

    2. Java集合框架:如ArrayList、LinkedList、HashMap等,用于存储和操作数据。 3. JDBC:Java数据库连接,用于与数据库进行交互,执行SQL语句。 4. Spring框架:提供依赖注入、AOP(面向切面编程)等功能,简化企业...

    asp.net面试题总结

    - 接口可以继承其他接口,抽象类可以实现接口,但抽象类不能继承抽象类。 - 实体类(非抽象类)可以继承抽象类,但条件是抽象类必须有默认构造函数。 4. **构造器的特性** - 构造器不能被继承,因此不能被重写...

    asp.net与JAVA学习顺序,最好的学习顺序,会员朋友整理

    - 集合框架:学习ArrayList、HashMap等常用集合类的使用方法。 3. **GUI编程**: - Swing/AWT:使用Swing或AWT库开发图形用户界面应用。 **进阶阶段:** 1. **Java Web开发**: - Servlets/JSP:了解Servlet的...

    JAVA ASP.NET面试题全集

    此外,Java集合框架(如ArrayList、LinkedList、HashMap等)的使用场景和操作细节也是常考点。对于并发编程,线程同步机制(synchronized、volatile、Lock等)和并发工具类(ExecutorService、Semaphore、...

    asp.net面试题

    10. **HashMap与Hashtable**:HashMap是非线程安全的,允许null键值对,性能相对较高;Hashtable是线程安全的,不允许null键值对。 11. **Collection与Collections的区别**:Collection是所有集合类的父接口,...

    java题目以及Java面试题和ASP.NET的技术题目java题目以及Java面试题和ASP.NET的技术题目java题目以及Java面试题和ASP.NET的技术题目

    - 学习ArrayList、LinkedList、HashSet、HashMap等集合类的特性和使用场景。 - 掌握泛型的概念,以及在集合中使用泛型的好处。 - 理解迭代器(Iterator)的使用方法,以及并发环境下集合的线程安全问题。 4. 多...

    编程技巧:C/C++,ASP.NET,JAVA,Linux shell,SQL等

    例如,HashMap和ArrayList的使用,以及何时选择LinkedList或TreeSet。多线程编程是Java中的重要一环,理解synchronized关键字和并发工具类(如Semaphore、ExecutorService)可以帮助你写出高效且安全的并发程序。 ...

    公司面试题-java-c#-asp.net

    面试中可能会涉及的基础知识点包括:Java语法(如封装、继承、多态),集合框架(ArrayList、LinkedList、HashMap的区别与使用),异常处理,线程同步(synchronized关键字与锁机制),IO流,以及Java虚拟机(JVM)...

    北大青鸟ACCP5.0Y2毕业考试(JAVA、ASP.NET)理论试题合集(2)

    3. **集合框架**:深入理解ArrayList、LinkedList、HashSet、HashMap等集合类的使用,以及泛型、迭代器、接口与抽象类的区别。 4. **IO流**:学习输入输出流的基本操作,包括字节流和字符流,以及缓冲流、对象流和...

    java,asp,c#各种面试题

    3. **集合框架**: List、Set、Queue、Map接口及其具体实现类如ArrayList、LinkedList、HashSet、HashMap等的使用和区别。 4. **异常处理**: 异常分类、try-catch-finally语句块、自定义异常。 5. **多线程**: 线程...

    机试笔试面试题(主要是Java,其次是ASP.net,C#,Oracle).rar

    Java的核心知识点包括面向对象编程概念(如封装、继承和多态)、异常处理、集合框架(如ArrayList、LinkedList、HashMap等)、IO流、线程同步、反射机制、设计模式(如单例、工厂、观察者等),以及JVM工作原理。...

    面试锦囊妙计经典java asp.net php 面试题目

    5. **集合框架**:List、Set、Map接口的理解,ArrayList、LinkedList、HashSet、HashMap的区别及应用场景。 6. **多线程**:线程的创建方式,同步机制(synchronized,wait(),notify(),Lock等)。 7. **JVM**:...

    常用java asp.net ado.net sqlserver面试题集

    面试中可能会涉及到Java的基础语法、类与对象、封装、继承、多态性、异常处理、集合框架(如ArrayList、LinkedList、HashMap等)、线程、IO流、网络编程等内容。 ASP.NET是微软开发的一种用于构建Web应用程序的框架...

    androdid课程表

    ArrayList&lt;HashMap, Object&gt;&gt; listItems = new ArrayList(); for (int i = 0; i ; i++) { HashMap, Object&gt; item = new HashMap(); item.put("course", courses[i]); listItems.add(item); } listItemAdapter...

    asp.Net经典面试33条题及答案

    ### ASP.NET经典面试33条题及答案解析 #### 1. .NET中类和结构的区别? 在.NET框架中,类(`class`)和结构(`struct`)是两种不同的数据类型,它们的主要区别在于存储方式、初始化、实例化等几个方面。 - **存储...

    NET面试题库,含答案

    14. HashMap 和 Hashtable 的区别:HashMap 是 Hashtable 的轻量级实现,非线程安全的实现他们都实现了 map 接口,主要区别是 HashMap 键值可以为空 null,效率可以高于 Hashtable。 15. Collection 和 Collections...

    北大青鸟2年笔试机试集锦

    2. 集合框架:理解ArrayList、LinkedList、HashSet、HashMap等集合类,以及泛型的应用。 3. 异常处理:学习try-catch-finally语句,理解和运用异常类型。 4. 多线程:掌握Thread类和Runnable接口,了解线程同步和...

    面试题-java大量题目集合

    - **Vector**: 继承自 AbstractList 并实现了 List 接口,与 ArrayList 相似,但是它是线程安全的(内部实现采用了 synchronized 方法)。Vector 在进行迭代时,如果其他线程修改了列表(如调用 add 或 remove 方法...

    中科软面试部分题目中科软面试部分题目

    集合框架中的ArrayList与Vector、HashMap与Hashtable - **ArrayList**与**Vector**: - 相同点:都是基于数组实现的列表。 - 不同点:Vector线程安全而ArrayList不是;Vector的扩容比例默认为1.5倍,而ArrayList...

Global site tag (gtag.js) - Google Analytics