哈希集Java中的字符索引

时间:2018-10-24 06:55:56

标签: java hashset

使用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

}

查找的运行时必须与任何数据结构成线性关系。

4 个答案:

答案 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类没有任何函数可以在其中查找某些内容的索引,因此可以使用诸如ArrayListList之类的东西,但是如果要使用{{1 }}的任何方式,然后找到项目索引的唯一方法是像这样迭代它:-

HashSet