由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 有否可以O(1)remove 一个元素的java LinkedList推荐?
相关主题
C++如何实现graph?one more c++ question
分别用LinkedList和HashMap构建字典树(Compact Trie)怎么做请问一个查找算法。
STL/vector引用成员变量。[合集] 关于C++ STL的list的一个问题
关于inserterC++(非VC++) 删除链表时如何对指针操作? 在线等回复!谢谢!
deque的pointer和reference是怎么回事?linkedList in C++
stl iterator has "NULL" like const?请教一个编程问题
C++: What is the difference between the two approaches?stl 源代码疑问
能不能推荐一些关于Java算法复杂度的书?Java代码,老是compile出错,大家帮我看看哪错了。。。
相关话题的讨论汇总
话题: iterator话题: remove话题: linkedlist话题: list话题: 元素
进入Programming版参与讨论
1 (共1页)
f***e
发帖数: 5443
1
java.util 的没法O(1)remove 一个元素,只能用o(n),因为他的Node是private的
我猜是因为这样比较不容易在并发的情况下出错
之前在c里面可以直接remove double linked list的元素,因为 pre, nxt 都在Node里
面,现在java, Node private了,没法做到
如果用iterator, 只要改变了 list中的任何一个元素,iterator 都失效了,没法作为
永久存储
这样没法和 HashMap等等配合工作
高手有啥建议?
g*****g
发帖数: 34805
2
Iterator.remove() is an O(1) operation for LinkedList. If you have the
element and you want O(1) operation, you need to write your own double
linked list, which should be trivial enough.

【在 f***e 的大作中提到】
: java.util 的没法O(1)remove 一个元素,只能用o(n),因为他的Node是private的
: 我猜是因为这样比较不容易在并发的情况下出错
: 之前在c里面可以直接remove double linked list的元素,因为 pre, nxt 都在Node里
: 面,现在java, Node private了,没法做到
: 如果用iterator, 只要改变了 list中的任何一个元素,iterator 都失效了,没法作为
: 永久存储
: 这样没法和 HashMap等等配合工作
: 高手有啥建议?

f***e
发帖数: 5443
3
的确是可以copy一个出来,暴露 Node,
有更好的方法吗?

【在 g*****g 的大作中提到】
: Iterator.remove() is an O(1) operation for LinkedList. If you have the
: element and you want O(1) operation, you need to write your own double
: linked list, which should be trivial enough.

l*********s
发帖数: 5409
4
如果用iterator, 只要改变了 list中的任何一个元素,iterator 都失效了
I don't know java, but it sounds odd, why mutating an element needs to
invalidate a container iterator?
l**********n
发帖数: 8443
5
不会吧, iterator是Java实现generator的一种方式吧

【在 l*********s 的大作中提到】
: 如果用iterator, 只要改变了 list中的任何一个元素,iterator 都失效了
: I don't know java, but it sounds odd, why mutating an element needs to
: invalidate a container iterator?

z****e
发帖数: 54598
6
它说的应该是并发的问题
iterator就是一个enhanced loop
这个时候remove任何一个element都会导致concurrent modification exception的抛出
用弱循环就好了,或者用其他的并发类

【在 l*********s 的大作中提到】
: 如果用iterator, 只要改变了 list中的任何一个元素,iterator 都失效了
: I don't know java, but it sounds odd, why mutating an element needs to
: invalidate a container iterator?

z****e
发帖数: 54598
7
永久存储说的是persistence吗?
为啥要用list和serialisable捏?
找个db或者nosql存起来
不过这个问题怎么看都像是一个leetcode问题
g*****g
发帖数: 34805
8
You can't change a java list in a loop, but you can do remove on an iterator.

【在 l*********s 的大作中提到】
: 如果用iterator, 只要改变了 list中的任何一个元素,iterator 都失效了
: I don't know java, but it sounds odd, why mutating an element needs to
: invalidate a container iterator?

z****e
发帖数: 54598
9
还是要区分一下强循环和弱循环
弱循环的话,是可以更改list的
boolean objRemoved = false;
for(int i=0;i if(list.get(i).equals(sth.)){
list.remove(i); //ok
objRemoved = true;
}
if(objRemoved)
objRemoved = false;
else
i++;
}
强循环会出问题
for(Obj obj:list){
list.remove(obj); //exception
}
iterator的话
Iterator iterator = list.iterator();
while(iterator.hasNext()){
list.remove(i.next()); //exception,类似强循环
iterator.remove(); //ok,类似弱循环
}

iterator.

【在 g*****g 的大作中提到】
: You can't change a java list in a loop, but you can do remove on an iterator.
l*********s
发帖数: 5409
10
了解了多谢各位大师了!
f***e
发帖数: 5443
11
多谢解释,
我不应该用永久存储,就是放在另一个 数据结构里做reference, 感觉iterator 不合
适,因为可能被invalidate.

【在 z****e 的大作中提到】
: 永久存储说的是persistence吗?
: 为啥要用list和serialisable捏?
: 找个db或者nosql存起来
: 不过这个问题怎么看都像是一个leetcode问题

g*****g
发帖数: 34805
12
Leetcode LRU? 手写个double linked list就完了。

【在 f***e 的大作中提到】
: 多谢解释,
: 我不应该用永久存储,就是放在另一个 数据结构里做reference, 感觉iterator 不合
: 适,因为可能被invalidate.

f***e
发帖数: 5443
13
我用的是暴露 Node

【在 g*****g 的大作中提到】
: Leetcode LRU? 手写个double linked list就完了。
1 (共1页)
进入Programming版参与讨论
相关主题
Java代码,老是compile出错,大家帮我看看哪错了。。。deque的pointer和reference是怎么回事?
linked list vs Binary treestl iterator has "NULL" like const?
A C++ STL questionC++: What is the difference between the two approaches?
stl的问题,为啥swap可能会invalidate end iterator?能不能推荐一些关于Java算法复杂度的书?
C++如何实现graph?one more c++ question
分别用LinkedList和HashMap构建字典树(Compact Trie)怎么做请问一个查找算法。
STL/vector引用成员变量。[合集] 关于C++ STL的list的一个问题
关于inserterC++(非VC++) 删除链表时如何对指针操作? 在线等回复!谢谢!
相关话题的讨论汇总
话题: iterator话题: remove话题: linkedlist话题: list话题: 元素