使用Java时如何获取HashSet中元素的索引?
说
func incrementID() -> Int {
let realm = try! Realm()
var myvalue = realm.objects(ChatMessage.self).map{$0.mainId}.max() ?? 1
myvalue = myvalue + 1
chatMsgObj.mainId = myvalue
realm.add(chatMsgObj) //CRASH HERE
return myvalue
}
查找的运行时必须与任何数据结构成线性关系。
答案 0 :(得分:3)
Set接口没有类似indexOf()
方法的东西。您真的需要对其进行迭代,或者使用提供indexOf()
方法的List接口。
如果您愿意,将Set转换为List非常简单,那么只需将Set传递给List实现的构造函数即可。例如
List<String> nameList = new ArrayList<String>(nameSet);
答案 1 :(得分:0)
该集合没有定义的索引。相反,尝试使用类似HashMap的东西。这将为您提供恒定的containsKey时间:
HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
hm.put('s',1);
hm.put('t',2);
hm.put('a',3);
hm.put('c',4);
// some code
if (hm.containsKey('a')){
int a = hm.get('a') //index is here
}
答案 2 :(得分:0)
A设置为无序,因此无法从中获取索引。如果您仍然想从集合中获取索引,则可以选择对其进行迭代。
HashSet<Character> hs = new HashSet<Character>();
Iterator it = hs.iterator();
int index =-1;
while(it.hasNext()){
i++;
if(value.next()=='a'){
return;
}
}
return i== (hs.size()-1) ? -1 : i;
由于HashSet的无序性,将以这种方式权衡恒定时间查找。
答案 3 :(得分:0)
HashSet
类没有任何函数可以在其中查找某些内容的索引,因此可以使用诸如ArrayList
或List
之类的东西,但是如果要使用{{1 }}的任何方式,然后找到项目索引的唯一方法是像这样迭代它:-
HashSet