【发布时间】:2013-12-10 17:11:05
【问题描述】:
我的代码中有一个非常奇怪的动作。我有一个以下班级的ArrayList。
class mySocket
{
public String name;
public Socket sck;
public mySocket(String n,Socket s)
{
this.name=n;
this.sck=s;
}
}
我这样声明对象
ArrayList<mySocket> handler = new ArrayList<>();
现在的问题是,当我尝试使用此方法删除项目时:
public void removeByName(String name)
{
synchronized(this)
{
mySocket t;
int i;
for(i=0;i<handler.size();i++)
{
t=handler.get(i);
if((t.name.equals(name)))
{
handler.remove(i);
break;
}
}
}
}
remove 函数会清除索引后面的所有内容。
例如:
如果这个 ArrayList 有 3 个元素并且我调用 handler.remove(1) 它不仅会删除 1,还会删除第 2 行的对象。
【问题讨论】:
-
这个方法怎么称呼?方法中是否还有其他代码可以移除元素?
-
第一,你应该使用
t.name.equals(name)而不是compareTo(),第二,你能提供整个函数体包含这个for循环吗? -
你不需要在处理程序声明的两边都使用 mySocket 吗?例如 ArrayList
handler = new ArrayList ();这可能不是问题,但它仍然很有趣。 -
附注。按照约定,Java 中的类名以大写字母开头。阅读:Code Conventions for the Java Programming Language
-
@johnsoe 在 Java 7 中,您可以使用菱形运算符。将推断 RHS 上的泛型类型。