java字符数组的arraylist

java字符数组的arraylist,java,arrays,string,arraylist,char,Java,Arrays,String,Arraylist,Char,我最初有一个字符串的arraylist,但我想将其另存为这些字符串的arraylist。toCharArray()代替。是否可以创建一个存储字符数组的arraylist?下面是我如何尝试实现它的 String[] words = new String[]{"peter","month","tweet", "pete", "twee", "pet", "et"}; HashMap<Integer,ArrayList<Character[]>> ordered = n

我最初有一个字符串的arraylist,但我想将其另存为这些字符串的arraylist。toCharArray()代替。是否可以创建一个存储字符数组的arraylist?下面是我如何尝试实现它的

String[] words = new String[]{"peter","month","tweet", "pete", "twee", "pet", "et"};
    HashMap<Integer,ArrayList<Character[]>> ordered = new HashMap<>();

    int length = 0;
    int max = 0; //max Length of words left

    for(String word: words){

        if(ordered.containsKey(length) == false){ //if int length key doesnt exist yet
             ordered.put(length, new ArrayList<Character[]>()); //put key in hashmap with value of arraylist with the one value
             ordered.get(length).add(word.toCharArray());
        }
    }
String[]words=新字符串[]{“彼得”、“月”、“推特”、“皮特”、“特威”、“宠物”、“et”};
HashMap ordered=新的HashMap();
整数长度=0;
int max=0//剩余单词的最大长度
for(字符串字:字){
if(ordered.containsKey(length)==false){//if int-length键还不存在
ordered.put(长度,new ArrayList());//将值为ArrayList的键和一个值放在hashmap中
ordered.get(length.add(word.toCharArray());
}
}

请注意,
tocharray()
返回一个基元数组(
char[]
),而不是一个装箱类数组(
Character[]
)。此外,如果数组的长度不在映射中,则仅将给定数组添加到映射中,这可能不是您想要的行为(即,您应该将行
ordered.get(length).add(word.toCharArray());
移到
if
语句之外)

另外,请注意,Java 8的流可以为您完成很多繁重的工作:

String[] words = new String[]{"peter","month","tweet", "pete", "twee", "pet", "et"};
Map<Integer, List<char[]>> ordered =
    Arrays.stream(word)
          .map(String::toCharArray)
          .collect(Collectors.groupingBy(x -> x.length));
String[]words=新字符串[]{“彼得”、“月”、“推特”、“皮特”、“特威”、“宠物”、“et”};
有序地图=
Arrays.stream(word)
.map(字符串::tocharray)
.collect(收集器.groupingBy(x->x.length));
编辑:
根据评论中的问题,在没有流的Java 7中,这也是完全可能的:

String[] words = new String[]{"peter","month","tweet", "pete", "twee", "pet", "et"};
Map<Integer, List<char[]>> ordered = new HashMap<>();

for (String word: words) {
    int length = words.length();

    // if int length key doesnt exist in the map already
    List<char[]> list = orderd.get(length);
    if (list == null) {
        list = new ArrayList<>();
        orderd.put(length, list);
    }
    list.add(word);
}
String[]words=新字符串[]{“彼得”、“月”、“推特”、“皮特”、“特威”、“宠物”、“et”};
Map ordered=新的HashMap();
for(字符串字:字){
int length=words.length();
//如果映射中不存在int-length键
List List=orderd.get(长度);
if(list==null){
列表=新的ArrayList();
订单放置(长度、列表);
}
列表。添加(word);
}

Ohhh谢谢你,你能多谈谈char[]和拳击类角色[]吗。我想我必须有地图,而不是通用的。稍后我将研究Java 8流,但在Java 7中有没有这样做的方法?@PeterLuo数组是Java中的引用类型,因此
char[]
可以用作类型参数。由于
char
是一种基本类型,因此它不能()。有关Java 7问题的答案,请参见下文。@PeterLuo Logan的评论基本上解释了
char
vs
Character
这一点。WRT在Java7中实现了这一点——这有点笨重,但完全可能。有关详细信息,请参阅我编辑的答案。