A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这道题有俩个注意的地方,第一个是根据“,”切割字符串,对没有错,我在这地方卡住了,因为我一直在找英文的",",而这道题是中文“,",所以这里把我卡了半天,面试的同学开始不要急写代码,记得先看清楚题目。第二点就是这道题中要存储了一个相同的键,大家都知道常用的map是不能存储相同的键,我是想继承hashMap改写put的方法,无奈功底不够,最后是找到了map中的子类 IdentityHashMap<K,V>可以存储相同键。
不多说,上题, 上代码

/*
* 1、有类似这样的字符串:“1.2,3.4,5.6,7.8,5.56,44.55”, 请按照要求,依次完成以下试题

   ① 以逗号作为分隔符,把已知的字符串分成一个String类型的数组,
           数组中的每一个元素类似于“1.2","3.4"这样的字符串;
          
   ② 把数组中的每一个元素以.作为分割,把.号左边的元素作为key,
           把.号右边的元素作为value,封装到Map中,map中的key和value都是Object类型;
          
   ③ 把map中的key封装到Set中,并且把set中的元素输出;
   
   ④ 把map中的value封装到Collection中,把collection中的元素输出。
* */

/*
* 思路:1首先分割"," 注意是中文“,”,存入到字符串数组
*
*                 2遍历字符串数组, 分割".",存到各个字符串数组,用map将对应键值存储
*
*                 3用map中的keySet方法转成set集合,然后输出键值key
*
*                 4然后将值存到Collention集合中, 这里注意用ArrayLIst存储,因为可以顺序存储,与输出键可以对应
*
*遇到的问题:首先在切割“,”就花费了好长时间,后来重写代码发现“,“是中文,而不是英文”,“在这里就消耗大量时间
*                        最后做出这题时,发现无论用hashMap还TreeMap都不允许出现同样的键,试图继承hashMap重写put方法,想了
*                        好久想不出了,最后面试结束查看api文档发现map中还有一个类IdentityHashMap 此类可以允许存储相同键
* */
import java.util.*;
public class test3 {
        public static void main(String[] args)
        {
                String str = "1.2,3.4,5.6,7.8,5.56,44.55";
               
                String[] newStr = str.split(",");//将字符切割出来
               
                Map<String, String> me = new IdentityHashMap();//创建map
               
                for(int i = 0; i < newStr.length; i++)
                {
                       
                        String str1 = new String(newStr[i]);
                       
                        String[] str2 = str1.split("\\.");//切割 点
                       
                        String s1 = new String(str2[0]);
                        String s2 = new String(str2[1]);
                        me.put(s1, s2);//用map存储键和值
                }
                System.out.println(me);
                Set keySet = me.keySet();//创建set
                Iterator it1 = keySet.iterator();
                System.out.println("键值key为:");
                while(it1.hasNext())
                {
                        Object key = it1.next();
                        System.out.print(key + " ");
                }
               
                System.out.println();
                Collection c = new ArrayList();//创建ArrayList()因为是顺序存储
                Iterator it2 = keySet.iterator();
                while(it2.hasNext())
                {
                        Object key = it2.next();
                        Object value = me.get(key);
                        c.add(value);//将对应值存入到collection c中
                }
               
                System.out.println("对应的value值为:");//输出value
                System.out.println(c);
        }
}

9 个回复

倒序浏览
我都没听过那个可以重复的map集合,所以如果让我做的话,只能做个蹩脚的标记。
  1. package exercises;

  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.Collection;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import java.util.Set;

  8. /**
  9. * 1、有类似这样的字符串:“1.2,3.4,5.6,7.8,5.56,44.55”, 请按照要求,依次完成以下试题
  10. *
  11. * ① 以逗号作为分隔符,把已知的字符串分成一个String类型的数组, 数组中的每一个元素类似于“1.2","3.4"这样的字符串;
  12. *
  13. * ② 把数组中的每一个元素以.作为分割,把.号左边的元素作为key,
  14. * 把.号右边的元素作为value,封装到Map中,map中的key和value都是Object类型;
  15. *
  16. * ③ 把map中的key封装到Set中,并且把set中的元素输出;
  17. *
  18. * ④ 把map中的value封装到Collection中,把collection中的元素输出。
  19. */
  20. public class Test {
  21.         public static void main(String[] args) throws IOException {
  22.                 String str = "1.2,3.4,5.6,7.8,5.56,44.55";

  23.                 // 以逗号作为分隔符,把已知的字符串分成一个String类型的数组, 数组中的每一个元素类似于“1.2","3.4"这样的字符串;
  24.                 String[] arr = str.split(",");

  25.                 // 把数组中的每一个元素以.作为分割,把.号左边的元素作为key,把.号右边的元素作为value,封装到Map中,map中的key和value都是Object类型;
  26.                 Map<Object, Object> map = new HashMap<Object, Object>();
  27.                 int count = 0;
  28.                 for (String s : arr) {
  29.                         String[] els = s.split("\\.");
  30.                         Object o = map.put(els[0], els[1]);
  31.                         if (o != null)
  32.                                 map.put(els[0] + "[" + ++count + "]", o); // 如果key出现重复元素,在原来key的值后面加[count]
  33.                                                                                                                         // 如5[1]
  34.                 }

  35.                 // 把map中的key封装到Set中,并且把set中的元素输出;
  36.                 Set<Object> set = map.keySet();
  37.                 for (Object o : set) {
  38.                         System.out.println(o);
  39.                 }

  40.                 // 把map中的value封装到Collection中,把collection中的元素输出。
  41.                 Collection<Object> c = new ArrayList<Object>();
  42.                 for (Object o : set) {
  43.                         c.add(map.get(o));
  44.                 }
  45.                 System.out.println(c);
  46.         }
  47. }
复制代码



回复 使用道具 举报
啊,这面试题目有几个做的了,视频中都没讲的类,平时谁会了解这么多啊!
回复 使用道具 举报
楼主啥时面试的?

点评

前天 57期的  发表于 2015-1-14 06:52
回复 使用道具 举报
换新题了。。。呵呵
回复 使用道具 举报
哇哦!好像还不错。
回复 使用道具 举报
先收藏,有空再细看
回复 使用道具 举报
Rain2692 发表于 2015-1-13 22:00
换新题了。。。呵呵

这一换,措不及防啊
回复 使用道具 举报
美咲メイド 来自手机 中级黑马 2015-1-14 23:16:11
9#
收藏了~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马