集合框架总结
开篇废话
后补…..
提要
List Set Map
(What)是什么?
(How)怎么用?
一个小的应用(随便一个字符串算出字符的频度删除重复的字符).
(No Why)
详细报道
一.解决What和How
我们都知道数组是保存一组对象的最有效方式,但在实际情况中我们往往不知道要存多少对象,抑或需要更复杂且有效的方式储存,这时数组显得如此苍白而无力,而JAVA实用类提供的完整的容器类恰好能完美解决这一问题,其中的基本类型是:List,Set,Map以及Queue.( List,Set,Map就此入场)
(补充:Java的容器类位于Java.util包中)
下面我们来解决”What”,”How”这个问题
List ,Set, Map是三个常用的集合在系统中定义的接口,每种集合可以理解成为用来存放某种对象的容器.就像我们熟悉的数组.
List ,Set, Map三者的特点:
<!--[if !supportLists]-->1) <!--[endif]-->List
List也能像数组一样建立数字索引与对象的关联,表达数据结构中线性表的概念,List的主要特征是其元素以线性方式存储,且允许存放重复对象.List接口常用的实现类是ArrayList和LinkedList.
<!--[if !supportLists]-->2) <!--[endif]-->Set
Set 无序且不接受重复对象,(若e1.equals(e2)则e1和e2重复)Set常被用于测试归属性.常用的实现类为HashSet,TreeSet.
<!--[if !supportLists]-->3) <!--[endif]-->Map
Map(映射)是把键对象和值对象进行映射的集合,它的每一个元素都包含键对象和值对象.,从Map容器检索元素时,只要给键对象就会返回值对象,每个键最多可以映射一个值,但每个值可以被多个键映射.这一点会在下面的具体小应用中得到体现.
当然三者还有很多方法,在这就不一一赘述,JDK写的很清楚.下面就借着一个小应用简单的看看用法.
二.小程序
程序目标:1)对随便一个字符串(例如”fdsfdsfewffqfefggtrtwrtheq”)去除重复字符.
2)整理出每隔字符出现的频度
设计思路:我们先要把字符串转型为字符型并存如一维数组中,接下来就用到今天的知识,我们现在知道Map(映射)是把键对象和值对象进行映射的集合,它的每一个元素都包含键对象和值对象.,从Map容器检索元素时,只要给键对象就会返回值对象,每个键最多可以映射一个值,但每个值可以被多个键映射.那么我们可以用键对象存放数组元素,值对象用来计数这样就可以完成对频度的统计.(具体实现见代码).
详细代码:
//判断字符频度并打印
public class map {
public static void main(String[] args){
String str="fsadfdsafefefeferwfg";
char[]c=str.toCharArray();
int i=c.length-1;
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
map.put(c[0], 1);
//判断字符频度并打印
for(int j=1;j<=i;j++){
//如果字母存在,则加1
if(map.containsKey(c[j])){
Integer k =map.get(c[j]);
map.put(c[j],++k);
}
else
//如果字母不存在则加入
map.put(c[j], 1);
}
System.out.println(map);
}
}
//********************去重**********************\\
public class map2 {
static Integer k;
static int x;
public static void main(String[] args){
String str="fsadfdsafefefeferwfg";
char[] c=str.toCharArray();
int i=c.length-1;
HashMap map = new HashMap();
map.put(c[0], 1);
for(int x=1;x<=i;x++){
if(!map.containsKey(c[x])){
map.put(c[x], 1);
}
}
System.out.println(map);
}
}