- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要确保某个 Set<String>
我创建的代码没有在其他地方修改。当然,我最终使用了 Guava 的 ImmutableSet为此。
这个不可变集非常大(大约 59K 个字符串),我必须执行 Set#contains
每次调用特定方法时检查。所以我想知道是否有任何方法可以指定大集合中的查找。 Guava 的文档说:
A high-performance, immutable Set with reliable, user-specified iteration order. Does not permit null elements.
什么是user-specified iteration
意味着如果不可变集是通过调用 ImmutableSet#copyOf(aHashSet)
创建的?请问性能contains(String)
如果我使用 ImmutableSet#contains
会受到不利影响而不是 HashSet#contains
?更准确地说,我的问题如下:
有了一个不错的散列函数并且没有太多元素进入同一个桶,人们会期望 HashSet#contains
为 O(1)。将使用 copyOf
创建一个 ImmutableSet坚持这个?
我怀疑情况可能并非如此,原因有二:
Guava forum discussion on precisely this question (虽然似乎没有提供决定性的答案)。
我不清楚ImmutableSet#contains
遵从 java.util.Set#contains
(即,在我的例子中, HashSet
中的实现)或 com.google.common.collect.ImmutableCollection#contains
.如果是后者,那么ImmutableSet#contains
将是一个 O(n) 操作。
最佳答案
我在 the documentation 中看到的唯一确认是以下内容:
this class's factory methods create hash-based instances, ...
换句话说,您可以期望查找使用类似于 HashSet
的散列机制(因此具有性能特征)。文档故意含糊不清,以便可以进行各种改进(例如,对某些特殊情况使用特殊实现,如单例或空集)。
迭代顺序将取决于创建方法。在 copyOf
的情况下,它将是您传入的 Iterable
的迭代顺序(当然是在创建副本时)。这是有据可查的:
Returns an immutable set containing the given elements, in order.
至于是否服从set的contains方法,没有。因为 ImmutableSet
制作了一个副本(与 Collections.unmodifiableSet()
不同),它显然不能推迟到原始集的任何操作。
关于java - Guava 的 ImmutableSet 成员方法是否模仿 java.util.HashSet#contains?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28391456/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!