这道题有俩个注意的地方,第一个是根据“,”切割字符串,对没有错,我在这地方卡住了,因为我一直在找英文的",",而这道题是中文“,",所以这里把我卡了半天,面试的同学开始不要急写代码,记得先看清楚题目。第二点就是这道题中要存储了一个相同的键,大家都知道常用的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);
}
}
|
|