Question 1 将List<String>数组按字符串长度进行分类

今天在面试中遇到一个将字符串数组或list进行分类的面试问题,在此记录,以供学习和参考。

问题:

          将List<String>中的字符串按长度进行分类,并按长度大小进行输出 。

分析:

          1. 实现分类考虑使用K-V结构 ;

          2. 使用hashmap或treemap进行键-值对应,但考虑键-值 有可能是一对多的关系所以使用map<Integer,List<String>>                 结构;

          3. 鉴于要求中输出长度要进行排序,最终选用treemap<Integer,List<String>> ;

解决:

          1. 初始化list,如:    

List<String>arrlist = Arrays.asList("my","name","is","cmc") ;

          或

List<String>arrlist = new ArrayList<>() ;
		arrlist.add("my") ;
		arrlist.add("name") ;
		arrlist.add("is") ;
		arrlist.add("cmc") ;
		arrlist.add("coder") ;

          2. 初始化map用于存放按字符串长度分类的String结果

Map<Integer,List<String>> map = new TreeMap<>()  ;
          3. 遍历List进行分类操作
for(int i=0 ; i<arrlist.size() ; i++){
			String str = arrlist.get(i) ;
			int key = str.length() ;//设置字符串的长度为键
			if(map.containsKey(str.length())){  //如果已有键key,则获取list并往里加入str元素
				List<String> list = map.get(key) ;
				list.add(str) ;
			}else{
				List<String> list = new ArrayList<>() ;  //如果没有键key,则新建该长度的list并添加str元素
				list.add(str) ;
				map.put(key,list) ;
			}
		}

          4. 使用遍历器Iterator遍历map输出结果即可

Iterator<Integer> it = map.keySet().iterator() ;
		while(it.hasNext()){
			int rkey = it.next() ;
			List<String>rlist = map.get(rkey) ;
			System.out.println("长度为"+rkey+"的字符串有:") ;
			for(int j=0 ; j<rlist.size() ; j++){
				System.out.println(rlist.get(j));
			}
		}

输出结果:

长度为2的字符串有:
my
is
长度为3的字符串有:
cmc
长度为4的字符串有:
name

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值