【发布时间】:2014-12-06 03:48:31
【问题描述】:
我已经声明了一个 LinkedList,其中 Frame 是我的列表项。
private LinkedList<Frame> linkedList = new LinkedList<Frame>();
我意识到,当我测试 indexOf -1 时,即使列表包含查询的项目也会返回。文档说明“(...) 如果此列表不包含该元素,则为 -1。”。
https://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html#indexOf(java.lang.Object)
看看这些奇怪的结果:
linkedList.size() -> 1
linkedList.get(0) -> frame
linkedList.contains(linkedList.get(0)) -> false
linkedList.indexOf(linkedList.get(0)) -> -1
我忽略了什么吗?有什么想法吗?
我正在从各个线程访问列表而没有同步。这会导致问题吗?
--
日志(见下文):
12-05 20:30:00.101 16446-16461/cc.closeup I/System.out﹕ **** TEST 0
12-05 20:30:00.301 16446-16476/cc.closeup I/System.out﹕ **** TEST -1
12-05 20:30:00.856 16446-16461/cc.closeup I/System.out﹕ **** TEST 0
12-05 20:30:01.051 16446-16476/cc.closeup I/System.out﹕ **** TEST -1
12-05 20:30:01.601 16446-16461/cc.closeup I/System.out﹕ **** TEST 0
12-05 20:30:01.801 16446-16476/cc.closeup I/System.out﹕ **** TEST -1
12-05 20:30:02.356 16446-16461/cc.closeup I/System.out﹕ **** TEST 0
12-05 20:30:02.551 16446-16476/cc.closeup I/System.out﹕ **** TEST -1
12-05 20:30:03.101 16446-16461/cc.closeup I/System.out﹕ **** TEST 0
12-05 20:30:03.301 16446-16476/cc.closeup I/System.out﹕ **** TEST -1
【问题讨论】:
-
你的
Frame类型是如何实现equals(Object)的? -
一点也不。我需要实施它吗?
-
并非如此,它将继承
Object的实现,该实现应该适用于您展示的contains和indexOf情况。请给我们一个可重现的例子。 -
您是否正确同步了所有内容?读写?
-
您还需要将您对列表的访问权限放在同步块中,例如: synchronized(linkedList) { //您的代码 }
标签: java linked-list