for (int i = 0 ; i < list.size() ; i ++) { if(list.get(i).isCheck()) { list.remove(i); } }List中删除元素用这种方法不行吧
把list放进迭代器中,利用这个迭代器遍历到你需要对应的数据处然后调用迭代器对象的删除方法!
不应该不行的呀,,, 这是api里面指代的: public E remove(int index)移除此列表中指定位置处的元素。将任何后续元素向左移(从索引中减 1)。返回从列表中删除的元素。 指定者: 接口 List<E> 中的 remove 覆盖: 类 AbstractSequentialList<E> 中的 remove 参数: index - 要移除的元素的索引 返回: 以前在指定位置的元素 抛出: IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index >= size())
你们看我测试了这个方法: synchronized (list) {
for (int i = 0 ; i < list.size() ; i ++) { System.out.println(list.get(i).getMark() +"---\t"+list.get(i).getLevelMark() +"---\t"+list.get(i).isCheck()); if(list.get(i).isCheck()) { System.out.println("删除-----------"+list.remove(i));
if(list.get(i).isCheck()) {
list.remove(i);
}
}List中删除元素用这种方法不行吧
这是api里面指代的:
public E remove(int index)移除此列表中指定位置处的元素。将任何后续元素向左移(从索引中减 1)。返回从列表中删除的元素。 指定者:
接口 List<E> 中的 remove
覆盖:
类 AbstractSequentialList<E> 中的 remove
参数:
index - 要移除的元素的索引
返回:
以前在指定位置的元素
抛出:
IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index >= size())
synchronized (list) {
for (int i = 0 ; i < list.size() ; i ++) {
System.out.println(list.get(i).getMark()
+"---\t"+list.get(i).getLevelMark()
+"---\t"+list.get(i).isCheck());
if(list.get(i).isCheck()) {
System.out.println("删除-----------"+list.remove(i));
}
}
}得出的结论是;
8--- 正规工具--- false
0--- 无良商家--- false
8--- PIC管道--- false
1--- happyeve--- false
3--- PIC管道--- false
2--- 测试代码--- false
6--- 河流航海--- false
4--- 测试代码--- false
5--- 道路运营--- false
5--- 测试代码--- false
1--- 实验室jia--- false
4--- 实验室jia--- false
5--- 测试代码--- true
删除-----------sn.model.AreaTerminalFinalModel@79fc7299
4--- 无良商家--- false
7--- 河流航海--- false
6--- 航空交通--- false
3--- 测试代码--- false
4--- 测试代码--- true
删除-----------sn.model.AreaTerminalFinalModel@2cc7d960
3--- 河流航海--- false
5--- happyeve--- false
9--- 一心一意--- false
7--- 标准C1TTTT--- false
4--- 一心一意--- false
7--- 道路运营--- true
删除-----------sn.model.AreaTerminalFinalModel@74904497
7--- 无良商家--- false
6--- 河流航海--- true
删除-----------sn.model.AreaTerminalFinalModel@2b87514a
8--- 无良商家--- false
5--- 公关系统--- false
2--- 正规工具--- false
3--- PIC管道--- true
删除-----------sn.model.AreaTerminalFinalModel@40e9e799
3--- 无良商家--- false
每一个找到的元素都是执行了删除方法的。可是为什么就是删不掉呢????
public static void main(String[] args) {
List<AreaTerminalFinalModel> list
= new LinkedList<AreaTerminalFinalModel>();
list.add(new AreaTerminalFinalModel(1, "标准C1", 1f));
list.add(new AreaTerminalFinalModel(2, "实验室", 2f));
list.add(new AreaTerminalFinalModel(3, "公关系统", 3f));
list.add(new AreaTerminalFinalModel(4, "航空交通", 4f));
list.add(new AreaTerminalFinalModel(5, "标准C1", 5f));
list.add(new AreaTerminalFinalModel(6, "标准C1", 6f));
System.out.println("删除前:");
for (int i = 0 ; i <list.size() ; i++) {
System.out.println(list.get(i).getMark()
+"---\t"+list.get(i).getLevelMark()
+"---\t"+list.get(i).getLabel());
}
for (int i = 0 ; i < list.size() ; i ++) {
//删除levelMark为"标准C1"的元素
if(list.get(i).getLevelMark().equals("标准C1")) {
list.remove(i);
}
}
System.out.println("删除后:");
for (int i = 0 ; i <list.size() ; i++) {
System.out.println(list.get(i).getMark()
+"---\t"+list.get(i).getLevelMark()
+"---\t"+list.get(i).getLabel());
}
}
我昨晚到现在都关机了,,我是用迭代器删除的,我也debug了一下。但是我还是没有明白为什么没有删除掉它
我昨晚到现在都关机了,,我是用迭代器删除的,我也debug了一下。但是我还是没有明白为什么没有删除掉它同步块,资源被占用,而for循环里面继续操作,当资源被释放,下一个对象被同步的时候,到这里已经走了几个对象了,所谓的漏网之鱼吧!纯属猜测!家无水表,请勿跨省!
大概说法和你那个一样,但是意思不同了。这与同步锁没有关系的,操作方永远只有进程本身。在remove的时候后一元素在删除时立马前移,而后才执行i++动作,因此后面那个相当于是被漏掉了。是这样的