需要:
contains
来检查某个对象是否存储在结构中contains
返回true,则从结构中获取该特定对象并在该对象上调用某个getter
我考虑的选项:
地图 - 这适用于所有需求,但我没有地图(键和值)。我所拥有的只是一堆物体。通过将对象存储为键中的键和整数或其他内容来强制使用映射是不是一个好习惯?
设置可行,但是,它没有像get这样的提取方法。
contains
返回true,我将不得不遍历列表以查找我的特定对象的索引然后获取它。 我愿意使用不同的库,例如apache commons或guava。
答案 0 :(得分:2)
列表也可以,但它没有一个非基于索引的获取方法。
List
有一个indexOf(Object)
方法可以完全按照您的要求进行操作。
答案 1 :(得分:2)
虽然此best thing
中使用的scenario
将是 Map
,但因为它提供了基于Key-Value
对的快速检索。
但List
也允许根据索引获取数据。
因此,您可以使用List
或Map
。但为了让您的工作更轻松,我更喜欢Map
。因为我是Map
的情况,您不必搜索对象的index
,然后在该索引处获取Object
。获取只是one-line
操作。
// When using a List.
List<String> myList = new ArrayList<String>();
if (myList.contains("rohit")) {
myList.get(myList.indexOf("rohit"));
}
// When using Map.
Map<String, String> myMap = new HashMap<String, String>();
// You can directly fetch your object, based on some Key if you have one..
myMap.get("key");
答案 2 :(得分:-2)
你需要一套。你不需要一个fetch方法(你认为你这样做),因为就像你说你只有一堆对象。由于这些使用了equals
和hashCode
,因此正是您需要的一套。
当然地图也可以这样做,因为它的键也是一组,但最后你需要更好地指定你的要求,因为看起来你对数据结构的目的有点困惑。据我所知,你确实不需要地图。
哈希集实现可以。以下是您可以使用的所有内容:
class Foo
{
final String name;
Foo(String name)
{
this.name = name;
}
boolean equals(Object obj)
{
return (obj instanceof Foo) && ((Foo)obj).name.equals(name);
}
}
Set<Foo> fooSet = new HashSet<Foo>();
fooSet.add(new Foo("someFoo"));
assert fooSet.contains(new Foo("someFoo"));