注册 登录
Office中国论坛/Access中国论坛 返回首页

ganlinlao的个人空间 http://www.office-cn.net/?230471 [收藏] [复制] [分享] [RSS]

日志

在FreeBasic中使用集合类(泛型)(第三节)

已有 1870 次阅读2015-5-21 15:50 |个人分类:FreeBasic

接下来的内容,可能会不断地修正

Mdcollection接口的方法:
 isEmpty() :判断集合是否为空
 contains(): 判断集合中是否存在元素
remove():从集合中删除一个对象的引用
clone(): 复制集合
size() :返回集合中元素的数目
equals():
hashCode():
retainAll():
toArray() :返回一个数组,该数组中包括集合中的所有元素
toString():

List接口的方法:
add(ByRef element)        :向集合中加入一个元素
add(ByVal index As Integer, ByRef element)    :指定位置,插入一个元素
addAll( )                    :一次性插入多个元素
get(ByVal index As Integer)       :按位置,返回一个元素
getClass() As String         ?返回一个自定义类型,并转成string
clear() :删除集合中所有的对象,即不再持有这些对象的引用
indexOf()     :返回元素在列表中的位置
lastindexof()    :返回元素在列表中的最后的位置
listIterator()     :返回迭代器
listIterator(ByVal index As Integer) :从指定位置开始迭代
set(ByVal index As Integer, ByRef element ):      替换元素值
subList(ByVal fromIndex As Integer, ByVal toIndex As Integer)   :返回一个子列表

Vector接口的方法:(可以理解成动态列表?)
add(ByRef element)                               :向集合中加入一个元素
add(ByVal index As Integer, ByRef element)    :指定位置,插入一个元素
addElement(ByRef element)          
addAll( )                    :一次性插入多个元素
capacity() As Integer       :Vector的容量上限
copyInto(anArray() )       :复制成数组
elementAt(ByVal index As Integer)   :按位置返回元素?
elements()         :返回mdEnumeration
ensureCapacity(ByVal minCapacity As Integer)  :自动调整容量以达到至少需要的容量
getClass() As String         ?返回一个自定义类型,并转成string
firstElement()                :返回第一个元素
indexOf()                        :元素在Vector中的位置
insertElementAt()           :在指定位置插入元素
lastElement()                  :返回最后一个元素
lastIndexOf                     :
removeAllElements()       :删除所有的元素
removeElement                :删除元素
removeElementAt            :在指定位置删除元素
trimToSize()                      :删除空余的容量,以节约内存


Map接口的方法:
equals():
getClass() As String
getKey():
getValue():
setValue:
toString():



使用MdList的例子
注意点:
1、mdCollection 是List类的基类。通常您应当使用 mdList 而不是 mdCollection
2、mdSet 不允许重复,而 mdList 则允许重复。
3、mdVector是一个有capacity(容量)的List表,如果数据达到容量的上限,必须手动调整容量,否则无法在Vector表中再增加元素
也就是说MdVector无法自动增加容量。('这个有点悲催呀')
4、mdStack(堆栈) 和 mdVector相似,但多增加一些方法。堆栈是一种"后进--先出"的list表
5、mdQueue (队列)是一种先进--先出的list表

1、在Mdlist中使用基本数据类型的例子:

#include once "md/util/Mdlist.bi"   '导入
mdListDeclare(string)                      '声明List表的类型
dim list as mdList(string)                 '创建list对象
list.add("hallo")
list.add("word")
for i as integer=0 to list.size() -1
print list.get(i)
next
sleep

注意点1:get()方法是唯一可在list和它的子类中使用的方法?
注意点2:mdTypes支持所有freebasic的类型。但有一个数据类型integer要注意。在mdTypes中的一些方法也会使用integer,这样容易导致与integer数据类型发生冲突,所以尽量用long代替integer
注意点3:mdListDeclare(类型),dim list as mdlist(类型),都是必须强制声明。

2、list中元素是指针的例子:
#include once "md/util/mdList.bi"
mdListDeclare(Byte,Ptr)
dim list as mdList(byte,ptr)
dim as byte ptr a=new byte
dim as byte ptr b=new byte
*a=5
*b=7
list.add(a)
list.add(b)

for i as long=0 to list.size() -1
print *list.get(i)
delete list.get(i)
next

3、在list表中使用自定义类型UDT或自定义class

#Include Once "md/util/mdList.bi"
Type MyClass
    Declare Constructor ()
    Declare Operator Cast() As String
    As Integer myVar
End Type
'Must have a default constructor or no explicit constructor at all!
Constructor MyClass ()
End Constructor
'Must implement cast to string for string representation
Operator MyClass.Cast() As String
    Return Str(myVar)
End Operator
'Operator for comparision must exist!
Operator = (ByRef lhs As MyClass, ByRef rhs As MyClass) As Integer
    Return lhs.myVar = rhs.myVar
End Operator

mdListDeclare(MyClass)
Dim As mdList(MyClass) list

Dim As MyClass foo
foo.myVar = 0 : list.add(foo)
foo.myVar = 1 : list.add(foo)

For i As Integer = 0 To list.size() - 1
    Print list.get(i).myVar
Next

Sleep

注意点:1、自定义UDT,必须拥有一个空的构造函数。
              2、必须声明拥有一个cast,强制返回字符串
             3、必须拥有一个=比较符,能够比较两个自定义的对象

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-19 23:26 , Processed in 0.064151 second(s), 17 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部