- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在将实体对象添加到我的 ArrayList(此处称为实体)时遇到问题。每个 Entity-object 都有一个 long ID,int x-position 和 y-position
首先我检查列表是否为空,它应该在开头。如果我添加第二个实体对象,我会检查对象的 ID 是否存在,如果存在,则更新实体对象的位置。如果该对象不存在,则应添加。
我的问题是 ArrayList 的大小变得巨大,我不确定如何修复它。
以下所有代码都位于连续运行的 update() 方法中。
/**
* Method that checks if the entity exist or not.
* @param ent - The Entity that should be updated or added.
*/
public void checkEntity(Entity ent){
if(entities.isEmpty()){
entities.add(ent);
}
else{
for(ListIterator<Entity> li = entities.listIterator(); li.hasNext();){
Entity next = li.next();
if(next.getID() == ent.getID()){
// System.out.println("id: " + next.getID() + " xPos: " + next.getXPos() + " yPos: " + next.getYPos() + " type: " + next.getType());
next.setXPos(xPos);
next.setYPos(yPos);
}
else{
li.add(ent);
}
System.out.println(entities.size());
}
}
最佳答案
问题是每次您发现一个不具有相同 ID 的条目时,您都在向列表中添加一个新条目...您的添加
调用是在你的循环中,它不应该是。
基本上,你应该有这样的东西:
public void checkEntity(Entity entity) {
for (Entity candidate : entities) {
if (candidate.getID() == entity.getID()) {
candidate.setXPos(entity.getXPos());
candidate.setYPos(entity.getYPos());
// Found a matching entity, so we're done now.
// This is important, so we don't add the entity again.
return;
}
}
// Haven't found it, so add it to the list
entities.add(entity);
}
请注意,如果您添加大量实体,这将非常低效。如果有一个从实体 ID 到实体的映射,效率会高很多...这样您就不需要检查每个 实体每次。
关于添加对象时 Java ArrayList 大小变得巨大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39819755/
我在 android 代码中使用 asmack XMPP。我可以正常登录 XMPP 服务器,但是当我尝试创建新用户时出现问题。我想要实现的是: 以管理员身份登录。 创建一个新用户。 从管理员注销。 以
这是我的标记页面,其中有一个按钮可以从数据库中搜索数据并显示在网格中 这是我背后的代码 if (!IsPostBack) { LblInfo.Text = "Page Load
当我多次将相同的 float 值插入到我的集合中时,本应花费恒定时间的 x in s 检查变得非常慢。为什么? 时序x in s的输出: 0.06 microseconds 0.09 mi
我有一个小型聊天客户端,可以将所有历史记录存储在 sqlite 数据库中。当用户单击我的应用程序中的 history 选项卡时,我的应用程序会获取所有相关历史记录并将其显示在 QWebView 中。我
我是一名优秀的程序员,十分优秀!