一、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
1369

被折叠的 条评论
为什么被折叠?



