我的问题陈述就像当我得到一个数据时,我将它存储在一个数据结构中并保留一个计数器。如果出现类似的东西,那么通过在数据结构中搜索它是否已经存在类似的东西那么只需增加计数器,我的数据没有限制。数据有时可能会更大。因此,作为java的初学者,我想知道哪个数据结构对我的问题是好的/有效的。
答案 0 :(得分:3)
你想要一个HashMap,无论你的“数据”是什么键,还有一个计数器作为值。
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/HashMap.html
它是一个很好的选择的原因是因为它有O(1)“包含”检查,检索和插入时间。只要您不需要对数据进行排序,它就是一个很好的选择。
这个未经测试的代码可以帮助您入门。将String
替换为您的数据类型。如果是自定义类,则必须重载hashCode()
和equals()
。
HashMap<String, Integer> map = new HashMap<String, Integer>();
...
Integer i = map.get(data);
if(i == null) {
map.put(data, 1);
} else {
map.put(data, i + 1);
}
答案 1 :(得分:1)
听起来您需要使用HashMap<YourClass, Integer>
(link)。
值是计数器,这就是整数的原因。 什么时候出现,你检查一下那个钥匙的物品是否存在。如果不是,则添加它(值为1),否则添加值为1加上前一个值。
你可以通过而不是Integer来优化它,使你的值成为一个自定义类,它包装一个整数并允许递增。这样,每次递增时都不必插入哈希映射。