library having two types of books
Design

Since duplicates are allowed (no Set required) and you don't need to fetch books by name (no Map required), ArrayList will do just fine.

Overview Collection Types

Guard public entrypoints

Make sure to checks arguments on all publically available code that takes input from calling code.

if (novels == null) throw new IllegalArgumentException("novels must be set");


Use plural for variable names that represent collections

private List&lt;Novel&gt; novels = new ArrayList&lt;&gt;();
private List&lt;ArtAlbum&gt; artAlbums = new ArrayList&lt;&gt;();


Initialize object members only once

Don't create the ArrayList instances twice. You can use addAll to add a range of items to a list. Perhaps you also want to create public methods to perform these actions.

public class LibraryCatalog {
        private List&lt;Novel&gt; novels = new ArrayList&lt;&gt;();
        private List&lt;ArtAlbum&gt; artAlbums = new ArrayList&lt;&gt;();

        public LibraryCatalog(List&lt;Novel&gt; novels, List&lt;ArtAlbum&gt; artAlbums) {
            if (novels == null)
                throw new IllegalArgumentException("novels must be set");
            if (artAlbums == null)
              throw new IllegalArgumentException("argument must be set");
            this.novels.addAll(novels);
            this.artAlbums.addAll(artAlbums);
        }
    }