黑马程序员技术交流社区
标题:
分享一道面试测试题,附上我自己写的代码
[打印本页]
作者:
廖彬
时间:
2015-1-13 15:04
标题:
分享一道面试测试题,附上我自己写的代码
这道题有俩个注意的地方,第一个是根据“,”切割字符串,对没有错,我在这地方卡住了,因为我一直在找英文的",",而这道题是中文“,",所以这里把我卡了半天,面试的同学开始不要急写代码,记得先看清楚题目。第二点就是这道题中要存储了一个相同的键,大家都知道常用的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);
}
}
作者:
noiary
时间:
2015-1-13 21:33
我都没听过那个可以重复的map集合,所以如果让我做的话,只能做个蹩脚的标记。
package exercises;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* 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中的元素输出。
*/
public class Test {
public static void main(String[] args) throws IOException {
String str = "1.2,3.4,5.6,7.8,5.56,44.55";
// 以逗号作为分隔符,把已知的字符串分成一个String类型的数组, 数组中的每一个元素类似于“1.2","3.4"这样的字符串;
String[] arr = str.split(",");
// 把数组中的每一个元素以.作为分割,把.号左边的元素作为key,把.号右边的元素作为value,封装到Map中,map中的key和value都是Object类型;
Map<Object, Object> map = new HashMap<Object, Object>();
int count = 0;
for (String s : arr) {
String[] els = s.split("\\.");
Object o = map.put(els[0], els[1]);
if (o != null)
map.put(els[0] + "[" + ++count + "]", o); // 如果key出现重复元素,在原来key的值后面加[count]
// 如5[1]
}
// 把map中的key封装到Set中,并且把set中的元素输出;
Set<Object> set = map.keySet();
for (Object o : set) {
System.out.println(o);
}
// 把map中的value封装到Collection中,把collection中的元素输出。
Collection<Object> c = new ArrayList<Object>();
for (Object o : set) {
c.add(map.get(o));
}
System.out.println(c);
}
}
复制代码
作者:
鹰击长空168
时间:
2015-1-13 21:46
啊,这面试题目有几个做的了,视频中都没讲的类,平时谁会了解这么多啊!
作者:
鹰击长空168
时间:
2015-1-13 21:48
楼主啥时面试的?
作者:
Rain2692
时间:
2015-1-13 22:00
换新题了。。。呵呵
作者:
jun_03
时间:
2015-1-13 23:05
哇哦!好像还不错。
作者:
任我行_2014
时间:
2015-1-14 00:03
先收藏,有空再细看
作者:
鹰击长空168
时间:
2015-1-14 21:25
Rain2692 发表于 2015-1-13 22:00
换新题了。。。呵呵
这一换,措不及防啊
作者:
美咲メイド
时间:
2015-1-14 23:16
收藏了~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2