4. 实现字符串分组 [“ate”,”att”,”test”,”ttes”,”tae”] 分组结果是 [[“ate”,”tae”],[“test”,”ttes],[“att”]]

 public static void main(String[] args) {
         String[] str = {"ate","att","test","ttes","tae"};
         List<List<String>> group = group(str);
         System.out.println(group);
     }
     public static List<List<String>> group(String[] str){
         //key用于存储排序后的数据,由于排序后的一个数据对应排序前的多个,value值存储排序前的数据,所以多个数据应该用List来存储
         HashMap<String, List<String>> map = new HashMap<>();
         for (String s : str) {
             //将数组遍历,然后将数组中的元素转换成字节,因为我们要根据字母来进行排序
             byte[] bytes = s.getBytes();
             Arrays.sort(bytes);
             //将字节再次转化成字符串
             String s1 = new String(bytes); //这个就是已经排序好的字符串
             if (!map.containsKey(s1)){
                 //给所有的value值全部new了一个ArrayList<String>数组
                 map.put(s1,new ArrayList<String>()); //将排序后的词放入key的位置
             }
             //这句话与if已经没有关系了,这句话就算没有if也能一直执行,它的else语句没有写的话默认是这个
             //在同一次循环中,s1和s肯定是对应的同一个数据,因为他们一个是排序前的一个是排序后的
             map.get(s1).add(s);//将key值对应的value值,放进去排序之前的词,如果key值重复,value值可以同时存多个
         }
         return new ArrayList<>(map.values());  //map中的value值也是一个ArrayList集合
     }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值