/**
  * Get sorted list of albums associated with this item.
  *
  * @param item DOCUMENT_ME
  * @return a list of item, void list if no result
  */
 public synchronized List<Album> getAssociatedAlbums(Item item) {
   List<Album> out;
   // [Perf] If item is a track, just return its album
   if (item instanceof Track) {
     out = new ArrayList<Album>(1);
     out.add(((Track) item).getAlbum());
   } else {
     ReadOnlyIterator<Album> albums = getAlbumsIterator();
     // Use a set to avoid dups
     Set<Album> albumSet = new HashSet<Album>();
     while (albums.hasNext()) {
       Album album = albums.next();
       for (Track track : album.getTracksCache()) {
         if (item instanceof Artist && track.getArtist().equals(item)) {
           albumSet.add(album);
         } else if (item instanceof Genre && track.getGenre().equals(item)) {
           albumSet.add(album);
         }
         if (item instanceof Year && track.getYear().equals(item)) {
           albumSet.add(album);
         }
       }
     }
     out = new ArrayList<Album>(albumSet);
     Collections.sort(out);
   }
   return out;
 }