Java 返回的索引-1

Java 返回的索引-1,java,android,arrays,indexof,Java,Android,Arrays,Indexof,我正在搜索集合中的字符串,并一直返回-1 下面是我的代码: Set<String> myTokens = sharedPreferences.getStringSet("myTokens", new HashSet<String>()); if(String.valueOf(myTokens).contains(auth.getUid())){ int i = Arrays.asList(myTokens).indexOf(auth.getUid

我正在搜索集合中的字符串,并一直返回-1

下面是我的代码:

Set<String> myTokens = sharedPreferences.getStringSet("myTokens", new HashSet<String>());

    if(String.valueOf(myTokens).contains(auth.getUid())){
        int i = Arrays.asList(myTokens).indexOf(auth.getUid());
        Log.w(TAG, "Index position of token is: " + String.valueOf(i) + " where the token array is: " + myTokens + "auth.getUid() is: " + auth.getUid());
不知道为什么我总是得到-1,有什么想法吗

有人建议auth.getUid()的值不在集合中。。但是“ztg4goqueucd6cqnaeokue7erhy2”出现在我放在问题底部的集合中

谢谢你的阅读

Arrays.asList(myTokens)
由于
myTokens
是一个
集合
,因此此表达式的类型为
List
,而不是
List

由于
列表
不能包含
String
元素,因此
indexOf(someString)
将始终返回-1

你应该使用

new ArrayList<>(myTokens)
new ArrayList(myTokens)
而是生成集合的副本,在计算该表达式时元素按其迭代顺序


但是:
myTokens
是(或者至少可以是)一个
HashSet
,它是一个无序的集合。因此,“指数”没有任何意义,因为如果您再次计算,无法保证指数是相同的。如果集合包含元素,则选择零也是一种同样有效的策略。

indexOf()
在集合中找不到元素时返回-1。感谢您的回复,值“ztg4goquecD6cqnaeokue7erhy2”在集合中?auth.getUid()“ztg4goquecD6cqnaeokue7erhy2”值未存储在集合中,这就是您获得-1的原因。当Set在集合中找不到值时,请尝试打印myTokens并查看为什么首先将
集合
转换为
字符串
Set
已经有了一个
。contains
方法,这个方法运行得很好。呵呵,我没有注意到当我写我的答案时,我假设
数组。asList
有一个集合重载+谢谢你,伙计!不知道如何使用共享首选项来实现这一点。无论如何,你都可以得到集合的索引,因为我不知道如何使用集合到数组来更改当前的实现。集合是无序集合。“索引”没有真正的意义。这不是我说的(或者至少不是我的意思):
newarraylist(myTokens)。indexOf(…)
<代码>数组。asList(myTokensList)是一个
列表
,原因与
数组完全相同。asList(myTokens)
是一个
列表
new ArrayList<>(myTokens)