什么接口表示具有插入顺序迭代的LinkedHashSet

Ric*_*ich 5 java sonarqube

由于以下代码行,我被Sonar拉了起来:

public void setFileNames(LinkedHashSet<String> fileNames) {
Run Code Online (Sandbox Code Playgroud)

带有错误消息:

避免使用像'LinkedHashSet'这样的实现类型; 改为使用界面

当我想表示一个Set保持其插入顺序的非排序时,有什么方法呢?我只是使用a Set并明确表示将保留迭代顺序吗?

存储的数据将使用JaxB序列化,反序列化后迭代顺序必不可少.

(我知道并完全理解这一点)

Hol*_*ger 3

不存在这样的情况interface,因为对于输入要求这种行为是没有意义的。创建 的代码可能Set有关于顺序的意图,并在创建 时选择适当的实现Set

\n\n

Set但是,a 是否具有插入顺序、字母顺序或任意顺序(例如基于散列的顺序)的问题对于像这样的方法有何影响?setFileNames(Set<String>\xc2\xa0fileNames)影响?

\n\n

将参数类型Set声明为 可以保证不会有\xe2\x80\x99 重复,这会对行为产生影响,但插入顺序关于Set.

\n\n

如果你坚持有一个方法签名setFileNames(LinkedHashSet<String> fileNames),我仍然可以传递一个Set无意义的顺序,例如调用
\nsetFileNames(new LinkedHashSet<String>(hashSet))或一组具有字典顺序的集合,例如setFileNames(new LinkedHashSet<String>(treeSet))。你的签名只会让事情变得更加复杂。

\n