- 有没有更好的方法来添加一个列表到另一个现有的列表比我在编写的add方法?
是从播放列表中删除歌曲列表的方式是否正确,或者我是否会遇到并发修改异常?Java集合操作
class Playlist { List<Song> playList; public void addSongs(List<Song> songs) { for(Song s:songs) playList.add(s); } public void removeSongs(List<Song> songs) { for(Song s:songs) if(playList.contains(s)) playList.remove(s); } }
Q
Java集合操作
0
A
回答
2
从一个列表的所有元素添加到另一个,使用;
追加所有指定集合中的元素来的 结束此列表,在他们被指定 collection的迭代
要删除所有返回的顺序一个列表中的元素来自另一个列表;
从列表中移除所有包含在 指定集合中的元素
1
使用addAll()
和removeAll()
方法:
playList.addAll(songs);
playList.removeAll(songs);
0
实例化List
class Playlist
{
List<Song> playList;
public Playlist(){
playList = new ArrayList<Song>();
}
你并不需要一个循环这里。改为使用addAll
。
public void addSongs(List<Song> songs)
{
playList.addAll(songs);
}
您也不需要循环。改为使用removeAll
。
public void removeSongs(List<Song> songs)
{
playList.removeAll(songs);
}
}
2
关于你的removeSongs
版本,但由于这不知道是该名单的修改而迭代它确实是导致concrrent修改例外
假设名单标准列表类的实例,你的代码不应该抛出CME。
如果您在迭代时修改集合(除了使用Iterator.remove()
...)时,通常会引发CME。您的代码正在迭代songs
并修改playlist
。这不会导致显示代码中的CME。
但是,如果一些其他的代码被同时使用此代码,其他代码可能它使用迭代器的下一次拿到CME迭代playlist
。同样,如果其他代码修改songs
而您的代码正在迭代它,那么这个代码可能会抛出一个CME。 (您需要查看代码的其余部分以确定是否可能出现这两种情况。)
相关问题
- 1. Java集合克隆操作
- 2. 关于集合的Java操作
- 3. 限制集合操作
- 4. 对java集合中的每个删除操作和添加操作
- 5. 的Java /斯卡拉(深)集合的互操作性
- 6. 使用Java期货的线程安全集合操作
- 7. jQuery - 在现有集合上使用集合操作函数
- 8. 期广义函数在STL集合操作所有集合
- 9. 集合和基于集合的操作的优点是什么?
- 10. 要遍历集合,集合操作更好选择如何?
- 11. 通用集合操作类,即交集,联合,减等
- 12. 关于Clojure集合的操作
- 13. Scala:设置更新集合的操作?
- 14. 在php中实现集合论操作
- 15. 集合操作的数据结构
- 16. SQL集合操作中的WHERE子句
- 17. 操作集合和ViewModel模式
- 18. 如何操作.NET中的VB6集合?
- 19. 阻止集合操作和结构
- 20. 渲染:部分操作:集合
- 21. 集合操作中对象的行为
- 22. 对项目集合执行操作
- 23. WCF服务存储和操作集合?
- 24. java.util.Collection的经典集合操作
- 25. c#linq - 基于集合的操作
- 26. 收集昂贵操作的Java同步
- 27. 子集操作
- 28. Java集合GC
- 29. Java集合框架的内部工作
- 30. 在Java中使用HashMap作为集合
我在构造函数中创建playList = new ArrayList ..所以我不会有null ptr异常。 – Phoenix