B4X编程语言:B4XCollections各集合对象的属性和方法

        一、B4XSet

        1、Add
        
向集合中添加一个项。
        语法:Add(Value as Object) As String
        Value:项的值,可以是任何类型的数据对象。当添加集合中已有的项时,
B4XSet会自动忽略,集合不会出现重复项。
        示例:

Dim s As B4XSet=B4XCollections.CreateSet
For i = 1 To 1000
	s.Add(Rnd(1, 5))
Next
s.AsList.Sort(False)
Dim str As String
For Each Value As Int In s.AsList
	str=str&Value
Next
Log(str)	'输出:4321

        2、AsList
        B4XSet的列表属性,返回一个列表。B4XSet通过这个列表向外输出数据。
        通常情况下,B4XSet中的项是同一个数据类型。如果B4XSet中的项不是同一个数据类型,使用For Each Value As Int In s.AsList输出数据将会发生错误,需要使用列表的取值方法并使用For i=0 To s.Size-1循环输出数据。
        接上例:

s.Clear
s. Add("abc")
s. Add(1)
s.Add(Label1)
s.Add(1)
Log(s.Size)		'输出:3
For i=0 To s.Size-1		
	If s.AsList.Get(i) Is Label Then
		Log(s.AsList.Get(i).As(Label).Text)
	Else
		Log(s.AsList.Get(i))	
	End If		
Next

        备注:只能使用B4XSet的Add方法向集合中添加项,不能使用AsList的Add方法添加。使用AsList的Add方法添加项只能添加到AsList列表,不会添加到B4XSet,会造成B4XSet和AsList数据项的不一致。

        3、Clear
        清空B4XSet,使B4XSet成为一个空集合。

        4、Contains
        测试某个数据项是否包含在B4XSet集合中,如果包含返回True,不包含则返回False。
        语法:Contains(Value as Object) As Boolean
        Value:项的值,可以是任何类型的数据对象。
        接上例:
        Log(s.Contains(Label1))
'输出:true
        Log(s.Contains(2))
'输出:false

        5、Initialize
        初始化
B4XSet。

        6、IsInitialized
        测试B4XSet是否已初始化,如果已初始化,返回True,否侧返回False。

        7、Remove
        B4XSet中移除一个项。
        语法:Remove(Value as Object) As String
        Value:要移除的
B4XSet集合中的项的值。可以是任何数据类型。

        8、Size(只读)
        返回
B4XSet集合的大小,也就是集合中项的数量。返回值类型:Int。

        二、B4XOrderedMap

        1、Clear
        清空B4XOrderedMap。

        2、ContainsKey
        测试B4XOrderedMap中是否包含某个键,如果包含返回True,否则返回False。
        语法:ContainsKey(Key As Object) As Boolean

        3、Get
        获取B4XOrderedMap中某个键的值。
        语法:Get(Key As Object) As Object
        Key:要获取其对应的值的键。
        示例:

Dim KeyList As List=Array("a", "b", "c", "d")
Dim ValueList As List=Array(1, 2, 3, 4)
Dim map As B4XOrderedMap=B4XCollections.CreateOrderedMap2(KeyList,ValueList )
Dim s As StringBuilder
s.Initialize
For Each k As Object In map.Keys
	s.Append(k).Append(";").Append( map.Get(k)).Append(",")		
Next
Log(s)		'输出:a;1,b;2,c;3,d;4,
Log("sorting...")
map.Keys.Sort(False) '按降序排列
s.Initialize
For Each k As Object In map.Keys
	s.Append(k).Append(";").Append( map.Get(k)).Append(",")
Next
Log(s)		'输出:d;4,c;3,b;2,a;1,

        4、GetDataForSerializator
        返回一个可以用B4XSerializator序列化的对象。
        B4XSerializator是一个B4X序列化器,它可以将对象转换为字节。B4X序列化器只使用字节数组或对象数组。
      B4XSerializator包含在RandomAccessFile库中(B4J中是jRandomAccessFile库),要使用B4XSerializator,您必须在IDE的库管理器中选中RandomAccessFile库(B4A)或jRandomAccessFile库(B4J)。
        接上例,将map映射存储为map.txt文件:
        Dim ser As B4XSerializator
        Dim b() As Byte=ser.ConvertObjectToBytes(map.GetDataForSerializator)
        File.WriteBytes(File.DirApp,"map.txt",b)

        5、SetDataFromSerializator
        从已去除序列化的对象中提取数据,将B4XOrderedMap数据设置为提取的数据。
        语法:SetDataFromSerializator(Data As Object) As String
        Data:已去除序列化的数据对象。一般使用B4XSerializator的ConvertBytesToObject方法进行反序列化。
        接上例,从map.txt读取保存的字节信息,反序列化后赋值给新的B4XOrderedMap:

Dim b1() As Byte=File.ReadBytes(File.DirApp,"map.txt")
Dim map1 As B4XOrderedMap
map1.Initialize
map1.SetDataFromSerializator(ser.ConvertBytesToObject(b1))
s.Initialize
For Each k As Object In map1.Keys
	s.Append(k).Append(";").Append( map1.Get(k)).Append(",")
Next
Log(s)		'输出:d;4,c;3,b;2,a;1,

        6、GetDefault
        返回某个键对应的值,如果该键或其对应的值不存在,则返回设定的默认值。
        语法:GetDefault(Key As Object,DefaultValue As Object) As Object
        Key:给定的键。
        DefaultValue:当Key不存在或Key对应的值不存在时返回的默认值。
        例如:
        Log(map.GetDefault("b",10)) '输出:2
        Log(map.GetDefault("e",10)) '输出:10

        7、Keys(只读)
        返回B4XOrderedMap中键的列表,返回值类型List。
        可以用List的Sort方法对该列表重新排序来改变列表中键的排列顺序。

        8、Values(只读)
        返回B4XOrderedMap中值的列表,返回值类型List。
        该列表是B4XOrderedMap中值的集合的副本,用List的Sort方法改变不了列表中值的排列顺序。
        示例(接上例):

map1.Values.Sort(True)	'按升序排列
s.Initialize
For Each v As Object In map1.Values
	s.Append(v).Append(",")
Next
Log(s)		'输出:4,3,2,1,

        9、Put
        在B4XOrderedMap末尾添加一个新的键值对。
        语法:Put(Key As Object,Value As Object) As String
        Key:要添加的键。
        Value:要添加的与Key对应的值。
        示例(接上例):

map1.Put("e",5)	
s.Initialize
For Each k As Object In map1.Keys
	s.Append(k).Append(";").Append( map1.Get(k)).Append(",")
Next
Log(s)	'输出:d;4,c;3,b;2,a;1,e;5,
map1.Keys.Sort(False)	'按降序排列
s.Initialize
For Each k As Object In map1.Keys
	s.Append(k).Append(";").Append( map1.Get(k)).Append(",")
Next
Log(s)	'输出:e;5,d;4,c;3,b;2,a;1,

        10、Remove
        从B4XOrderedMap中移除给定键的键值对。
        语法:Remove(Key As Object) As String
        Key:要移除的键。

        11、Size(只读)
        返回B4XOrderedMap的大小,即:B4XOrderedMap中键值对的数量。

        三、B4XBitSet

        1、Clear
        清空B4XBitSet。

        2、Get
        获取B4XBitSet集合中指定索引的Bit值。值类型:Boolean。
        语法:Get(Index As Int) As Boolean
        Index:B4XBitSet集合中项(Bit值)的索引。索引从0开始计数。

        3、Initialize
        初始化B4XBitSet集合,并指定其大小(集合中Bit值项的数量)。
        语法:Initialize(Size As Int) As String
        Size:B4XBitSet集合的大小(集合中项的数量)。
        注意:经初始化的B4XBitSet集合中,每个项(Bit值)的默认值为False。
        示例:
        Dim bitset2 As B4XBitSet
        bitset2.Initialize(5)
         Log(bitset2.Get(1)) '输出:false

        4、IsInitialized
        测试B4XBitSet是否已初始化,如果是则返回True,不是则返回False。

        5、Set
        设置B4XBitSet指定索引处的项(Bit)的值。
        语法:Set(Index As Int,Value As Boolean) As String
        Index:B4XBitSet集合中项(Bit值)的索引。索引从0开始计数。
        Value:集合中索引为Index的项的值。

        6、Size(只读)
        返回B4XBitSet的大小,即:B4XBitSet集合中项(Bit值)的数量。

        B4XBitSet示例:
        根据埃拉托梯尼筛算法找到1000以内的所有质数:

Dim bitset As B4XBitSet = B4XCollections.CreateBitSet(1000)
Dim n As Int = bitset.Size -1
For i = 2 To Sqrt(n)
   If bitset.Get(i) = False Then
       For j = i * i To n Step i
           bitset.Set(j, True)
       Next
   End If
Next
For i = 2 To bitset.Size - 1
   If bitset.Get(i) = False Then Log(i)	‘如果是质数就输出到日志。
Next

        四、B4XBytesBuilder

        (一) B4XBytesBuilder的属性

        1、InternalBuffer(只读)
        返回对内部缓冲区的引用。返回值类型:byte。

        2、Length(只读)
        返回B4XBytesBuilder集合的大小(byte数组的数量),返回值类型:Int。

        (二) B4XBytesBuilder修改存储数据的方法

        1、Append
        在B4XBytesBuilder集合的末尾添加数据。
        语法:Append(Data() As Byte) As B4XBytesBuilder
        Data():要添加的字节数组。
        示例:

Dim b As B4XBytesBuilder	
b.Initialize
For i = 0 To 10
	b.Append(Array As Byte(i))
Next
Dim s As StringBuilder
s.Initialize
Dim c() As Byte=b.ToArray
For i=0 To c.Length-1
	s.Append(c(i))
Next
Log(s)	'输出:012345678910

        2、Insert
        在B4XBytesBuilder集合的给定索引处插入数据。
        语法:Insert(Index As Int,Data() As Byte) As String
        Index:给定的索引,索引从0开始计算(首个索引为0)。
        Data():要插入的数据(字节数组)。
        示例:(接上例)

b.Insert(2,Array As Byte(9))
c=b.ToArray
s.Initialize
For i=0 To c.Length-1
	s.Append(c(i))
Next
Log(s)	'输出:0192345678910

        3、Set
        替换从给定的索引开始的数据。
        语法:Set(Index As Int,Data() As Byte) As String
        Index:给定的索引。
        Data():要替换的数据(字节数组)。
        示例:(接上例)

b.Set(2,Array As Byte(5))
c=b.ToArray
s.Initialize
For i=0 To c.Length-1
	s.Append(c(i))
Next
Log(s)	'输出:0152345678910

        4、Remove
        删除给定范围内的数据。
        语法:Remove(BeginIndex As Int,EndIndex As Int) As Byte()
        删除从索引BeginIndex处开始至索引EndIndex处结束的数据(不包括EndIndex处)。
        BeginIndex:起始索引。
        EndIndex:结束索引。
        示例:(接上例)

b.Remove(5,10)
c=b.ToArray
s.Initialize
For i=0 To c.Length-1
	s.Append(c(i))
Next
Log(s)	'输出:01523910

        5、Clear
        清空B4XBytesBuilder集合的数据。

        请注意,内部缓冲区会根据需要自动增长。

        (三) B4XBytesBuilder读取数据的方法:

        1、SubArray
        语法:SubArray(BeginIndex As Int) As Byte()
        返回从索引BeginIndex处开始的数据的副本,类似于String.SubString,但返回值类型为字节数组。
        示例:(接上例)

c=b.SubArray(1)
s.Initialize
For i=0 To c.Length-1
	s.Append(c(i))
Next
Log(s)	'输出:1523910

        2、SubArray2
        语法:SubArray2(BeginIndex As Int,EndIndex As Int) As Byte()
        返回从索引BeginIndex处开始到索引EndIndex处结束(不包括EndIndex处的数据)的数据的副本,类似于String.SubString2,但返回值类型为字节数组。
        示例:(接上例)

c=b.SubArray2(2,6)
s.Initialize
For i=0 To c.Length-1
	s.Append(c(i))
Next
Log(s)	'输出:5239

        3、ToArray
        语法:ToArray As Byte()
        返回B4XBytesBuilder集合数据的副本,类似于StringBuilder.ToString,但返回值类型为字节数组。

        4、IndexOf
        语法:IndexOf(SearchFor() As byte) As Int
        返回给定数据的索引,返回值类型:Int。类似于String.IndexOf,但此处的给定数据是字节数组,当搜索不到给定数据时返回-1。

        5、IndexOf2
        语法:IndexOf(SearchFor() As byte,Index As Int) As Int
        返回从给定索引Index处开始搜索的给定数据SearchFor()的索引,返回值类型:Int。类似于String.IndexOf2,但此处的给定数据是字节数组,当搜索不到给定数据时返回-1。

        综合示例:

Dim bb As BytesBuilder
bb.Initialize
For i = 0 To 255
   bb.Append(Array As Byte(i))
Next
bb.Insert(1, Array As Byte(0xFF, 0XFF, 0xFF))
Log(bb.IndexOf(Array As Byte(10, 11, 12)))
Log(bb.IndexOf(Array As Byte(0)))
Log(bb.IndexOf2(Array As Byte(0xFF), 3))
Dim bc As ByteConverter
Log(bc.HexFromBytes(bb.ToArray))
Log(bc.HexFromBytes(bb.SubArray2(250, 300)))

        五、B4XCache

        1、ContainsKey
        测试B4XCache中是否包含某个键,如果包含返回True,否则返回False。
        语法:ContainsKey(Key As String) As Boolean

        2、Get
        语法:Get(Key As String) As Object
        从缓存获取给定键Key对应的值,如果给定的键Key不存在,则返回Null。

        3、Initialize
        
初始化B4XCache。

        4、IsInitialized
        
检测B4XCache是否已被初始化,如果是则返回True。否则返回False。

        5、Keys
        返回B4XCache中键的列表,返回值类型List。
        不要修改此列表,因为它没有被复制。

        6、MaxSize
        
获取或设置缓存的最大大小。返回值类型:Int。

        7、Put
        语法:Put(Key As String,Value As Object) As Object
        向缓存添加一个键值对的项。返回值:Value。
        如果缓存大于MaxSize,则缓存将被被自动裁剪。

        8、PutEternal
        语法:PutEternal(Key As String,Value As Object) As Object
        向缓存添加一个永久的键值对项。该项不会被自动删除,也不会影响缓存限定的最大值。

        9、Remove
        语法:Remove(Key As String) As String
        从缓存中删除给定键Key对应的键值对的项。

        10、RemoveOldItems
        语法:RemoveOldItems(AgeMs As Long) As String
        删除在最近AgeMs毫秒内未被访问的项。

        11、Size
        返回缓存大小,返回值类型:Int。

        示例:

Dim cache As B4XCache
cache.Initialize
cache.MaxSize=5	
For i=1 To 5
	Dim a As String="a"&i
	If i=2 Then
		cache.PutEternal(a,i)
	Else
		cache.Put(a,i)	
	End If		
Next
Dim s As StringBuilder
s.Initialize
For Each k As String In cache.Keys
	s.Append(k).Append(":").Append(cache.Get(k)).Append(" ")
Next
Log(cache.Size)		'输出:5
Log(s)	'输出:a1:1 a2:2 a3:3 a4:4 a5:5
	
Log(cache.Put("a6",6))	'输出:6
Log(cache.Put("a7",7))	'输出:7
Log(cache.Size)	'输出:4
s.Initialize
For Each k As String In cache.Keys
	s.Append(k).Append(":").Append(cache.Get(k)).Append(" ")
Next
Log(s)	'输出:a2:2 a5:5 a6:6 a7:7

cache.Put("a8",8)
cache.Put("a9",9)
s.Initialize
For Each k As String In cache.Keys
	s.Append(k).Append(":").Append(cache.Get(k)).Append(" ")
Next
Log(cache.Size)		'输出:6
Log(s)	'输出:a2:2 a5:5 a6:6 a7:7 a8:8 a9:9


 


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝色天空上的云朵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值