如何找到不同的类型然后添加到阵列链表

时间:2015-11-28 07:07:43

标签: java arrays linked-list hashmap hashtable

我试图从电影文件中获取流派,然后检查流派是否相同。因此,如果文件中有相同类型的电影,则应将它们存储在相同的链接列表数组中。

我需要检查类型的哈希码,然后找出文件中是否有任何其他电影散列类型的相同哈希码,然后将该特定类型放入链表。所以基本上我到目前为止,我还有一个链接列表类,而不是使用java.util

public class LoadingMovies {

    private static final int size = 22;
    private static HashMap<String, Movies> hash = new HashMap(size);
    private static HashEntry<String, Movies> hasher = new HashEntry();
    private static List<Movies> linked = new List<>();

    public static void loadMovies(String filename) throws FileNotFoundException {
        String split = ","; //split with comma

        Scanner in = new Scanner(new File(filename));

        ArrayList<String> arraylist = new ArrayList<>();
        String wordIn;
        Movies movie = new Movies();

        while (in.hasNextLine()) {
            wordIn = in.nextLine();
            String splitter[] = wordIn.split(split);

            String movieTitle = splitter[0];
            String movieGenre = splitter[1];
            String ageRating = splitter[2];
            double scoreRating = Double.parseDouble(splitter[3]);

            movie.setTitle(movieTitle);
            movie.setGenre(movieGenre);
            movie.setAgeRating(ageRating);
            movie.setScoreRating(scoreRating);
            //System.out.println(movie.getGenre());
              arraylist.add(movie.getGenre);
//            hash.find(movie.getGenre().hashCode());
//            hash.insert(movie.getGenre().hashCode(), movie);
        }



      }
}

这是我到目前为止所拥有的。我现在已经阅读了文件,我想检查一下文件中的流派(String)是否相同,然后将该流派添加到链接列表中。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

HashMap<String, List<Movie>>似乎是您正在寻找的内容:

Map<String, List<Movie>> movieGenres = new HashMap<>();
while (in.hasNextLine()) {
    // code you have

    List<Movie> moviesInThisGenre = moviewGenres.get(genre);
    if (moviesInThisGenre == null) {
        moviesInThisGenre = new LinkedList<>();
        movieGenres.put(genre, moviesInThisGenre);
    }
    moviesInThisGenre.add(movie);
}

答案 1 :(得分:1)

您需要一张从流派字符串映射到电影列表的地图:

HashMap<String, List<Movies>> genres = new Hash...

然后当你添加一个电影时:

String g = movie.getGenre();
if (!genres.containsKey(g)
    genres.put(g, new ArrayList<Movies>));
genres.get(g).add(movie);

<强>解释 HashMap存储关键对象的值,其中每个关键对象只能在地图中出现一次。因此,当您想为一个类型的String存储多个电影时,值类型应该是一个集合(List,Set等)。 e.g。

HashMap<String, Movies> genres ... ;
...
genres.put(g, movie);

将覆盖您之前为该流派所拥有的任何电影价值。

但是,由于您无法在运行时知道您的地图中是否已存在该类型,因此您必须为未知类型添加新的(空)列表。任何具有该类型的电影现在都可以添加到该列表中。