gpt4 book ai didi

java - 多次访问数组列表

转载 作者:行者123 更新时间:2023-12-02 00:05:23 25 4
gpt4 key购买 nike

我有一个列表(数组列表),可以包含许多实例(500-3000 个实例之间)。在程序中,某些函数需要访问此列表(多次)并搜索特定实例或更多实例,以获取它们需要的实例在列表中循环并提供parentName和名称(即字符串)并且不是唯一键。

我的问题是,由于列表需要多次访问,有一种方法可以更好地定义/设计它列表的访问可以更有效吗?

请记住,需要从列表中获取实例的函数无法提供完整 key ,只能提供 nameparentName,其中可以有更多该实例。

List<Obj>   myList = new ArrayList<Obj>();

class obj
{
parentName
Name
type
curr
....

最佳答案

使用 Map<MyEntry, List<Obj>>哪里MyEntry是一个包含父名称和名称的类,如下所示:

public final class MyEntry
{
private final String parentName;
private final String name;
private final int hashCode;

public MyEntry(final String parentName, final String name)
{
this.parentName = parentName;
this.name = name;
hashCode = 31 * parentName.hashCode() + name.hashCode();
}

// Override .equals() and .hashCode()
@Override
public int hashCode()
{
return hashCode;
}

@Override
public boolean equals(final Object o)
{
if (this == o)
return true;
if (o == null)
return false;
if (getClass() != o.getClass())
return false;
final MyEntry other = (MyEntry) o;
return parentName.equals(other.parentName)
&& name.equals(other.name);
}

// Have a nice string representation
@Override
public String toString()
{
return "parent name: " + parentName + ", name: " + name;
}
}

例如,您可以在 Obj 中有一个方法它返回匹配的 MyEntry目的。另外,如果您使用 Guava,请查看 MultiMap .

您会注意到哈希码是预先计算的:这可以从MyEntry开始完成。类是不可变的。这允许非常快速地用作 Map 的键。 .

(编辑:添加 .toString() )

关于java - 多次访问数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14002245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com