0
  1. add メソッドでコーディングした方法よりも、リストを別の既存のリストに追加するより良い方法はありますか?
  2. プレイリストから曲のリストを削除する方法は正しいですか、それとも同時変更の例外が発生しますか?

    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);
    }
    
    
    }
    
4

4 に答える 4

2

あるリストから別のリストにすべての要素を追加するには、次を使用します。

List.addAll

指定されたコレクションのすべての要素を、指定されたコレクションの反復子によって返される順序で、このリストの末尾に追加します

あるリストからすべての要素を別のリストから削除するには;

List.removeAll

指定されたコレクションに含まれるすべての要素をこのリストから削除します

于 2012-10-11T01:48:42.843 に答える
2

あなたのバージョンを参照してremoveSongs

しかし、これは反復中のリストの変更であるため、同時変更例外が発生するのではないかと考えています

リストが標準のリスト クラスのインスタンスであると仮定すると、コードは CME をスローするべきではありません。

コレクションの反復中にコレクションを変更すると、通常、CME がスローされます (... を使用する場合を除くIterator.remove())。あなたのコードは反復songsと変更を行ってplaylistいます。これにより、示されているコードで CME が発生することはありません。

ただし、他のコードがこのコードと同時に反復している場合playlistその他のコードが次にその反復子を使用するときに CME を取得する可能性があります。同様に、コードの反復中に他のコードが変更された場合、このコードは CME をスローする可能性があります。(これらのシナリオのいずれかが可能かどうかを判断するには、残りのコードを調べる必要があります。)songs

于 2012-10-11T02:07:16.257 に答える
1

addAll()メソッドと removeAll()メソッドを使用します。

playList.addAll(songs);

playList.removeAll(songs);
于 2012-10-11T01:48:14.543 に答える
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);
}


}
于 2012-10-11T01:50:55.900 に答える