我可以创建一组数组吗?

时间:2013-11-21 17:42:03

标签: java arrays arraylist set

这是我想要做的。

我正在阅读一个单词列表,每个单词都有一定程度的复杂性。每行都有一个单词后跟逗号和单词的级别。 “看,2”例如。我希望将给定级别的所有单词放入一个集合中,以确保它们在该级别中的唯一性。有5个级别的复杂性,所以理想情况下我想要一个包含5个元素的数组,每个元素都是一个集合。

然后我可以在读取它们时为每个集合添加单词。稍后,我希望提取一个指定级别的随机单词。

除了如何创建一组数组之外,我很满意。我在这里读了几篇其他帖子似乎都认为这不能完全按照我的意愿完成,但我找不到好的工作。 (不,我不愿意在开关声明中有5套。违背谷物。)

感谢。

4 个答案:

答案 0 :(得分:1)

import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Main {
    private Set<String>[] process(List<String> words) {
        @SuppressWarnings("unchecked")
        Set<String>[] arrayOfSets = new Set[5];

        for(int i=0; i<arrayOfSets.length; i++) {
            arrayOfSets[i] = new HashSet<String>();
        }

        for(String word: words) {
            int index = getIndex(word);
            String val = getValue(word);

            arrayOfSets[index].add(val);
        }

        return arrayOfSets;
    }

    private int getIndex(String str) {
        //TODO Implement
        return 0;
    }

    private String getValue(String str) {
        //TODO Implement
        return "";
    }
}

答案 1 :(得分:1)

您可以使用地图。使用level作为键和值作为包含单词的集合。这将帮助您拉出给定级别的值,当从级别请求随机单词时,使用作为级别的键获取值(在本例中设置)并从中选择随机值。如果增加级别数也会缩放

public static void main(String[] args) {
    Map<Integer, Set<String>> levelSet = new HashMap();
    //Your code goes here to get the level and word
    //
    String word="";
    int level=0;
    addStringToLevel(levelSet,word,level);

    }

    private static void addStringToLevel(Map<Integer, Set<String>> levelSet,
            String word, int level) {
        if(levelSet.get(level) == null)
        {
            // this means this is the first string added for this level
            // so create a container to hold the object
            levelSet.put(level, new HashSet()); 
        }

        Set<String> wordContainer = levelSet.get(level);
        wordContainer.add(word);
    }

    private static String getStringFromLevel(Map<Integer, Set<String>> levelSet,
            int level) {
        if(levelSet.get(level) == null)
        {
            return null;
        }

        Set<String> wordContainer = levelSet.get(level);
        return "";// return a random string from wordContainer`
    }

答案 2 :(得分:1)

考虑使用List而不是数组。

这样做可能会让您的生活更轻松。

List<Set<String>> wordSetLevels = new ArrayList();

// ...
for ( i = 0; i < 5; i++ ) {
  wordSetLevels.add(new HashSet<String>());
}
wordSetLevels = Collections.unmodifiableList(wordSetLevels);

// ...
wordSetLevels.get(2).add("watch");

答案 3 :(得分:1)

如果您愿意使用番石榴,请尝试SetMultimap。它会照顾你的一切。

 SetMultimap<Integer, String> map = HashMultimap.create();
 map.put(5, "value");

该集合将负责为您创建内部Set实例,而不像数组或List解决方案需要预先创建Sets或检查它们是否存在。