集合框架的总结

[b][align=center]集合,队列,映射三者的用法及区别[/align][/b][size=medium]集合,队列,映射[/size][size=medium]三者都是一种容器,都是可以用来存取东西的,但是三者有不同的区别。
1.集合(Set)
集合中的对象是无序的,不可重复的,集合是一个接口定义,不能创建对象,只能通过它的子类去创建,它常用的子类有HashSet和TreeSet。无序是指:当你往集合中添加对象时没有特定的方式,就像往口袋里面放东西一样,口袋里的东西是杂乱的,没有特定的顺序,所以当你要取集合中的元素时,只能通过迭代器(Iterator)去取,不能像队列一样,通过下标去取,不可重复是指:集合中的对象不能相同。这一点可通过下面的程序证明:
import java.util.HashSet;

public class HashSetTest {


public static void main(String[] args){

//创建集合容器
HashSet<Integer> set =new HashSet<Integer>();

for(int i=0;i<10;i++){
int t = i*10;

set.add(t);//往集合中放对象
}
set.add(10);//再往集合中加入与集合中相同的对象
//遍历
//得到迭代器
java.util.Iterator<Integer> iter = set.iterator();
while(iter.hasNext()){
int t = iter.next();
System.out.println(t);
}
}
}
程序输出时只输出一个10,也就是说,程序中如果有相同的对象,它也只输出一个对象,即,不能有相同的对象。集合还有一个特点,当用迭代器取集合中的元素时,它的顺序是不一定的,它不会根据你存放时的顺序,输出相同的顺序。当你遇到要将不可重复的数字进行排序的题目时,可用集合。因为它本身就有这个去掉重复对象的功能,我们直接可以通过创建它的对象,然后往它里面添加就可以了,就不需要我们自己写方法去筛选。这样就会方便多了。
2.队列(List)
前面我们已经自己写过自定义队列,对队列有大致的了解,队列就是一条链,链当然有先后顺序的,所以,队列中的对象是有顺序的,而且队列中的对象可以相同,队列中的对象可以相同其实就是基于它是有顺序的,它可以通过下标去取对象。队列也是一个接口的定义,它也不能创建对象,只能通过子类去创建,它常用的子类有ArrayList和LinkedList.而且队列有起点和终点。当你去取队列中的对象时,它会根据先放先取的原则,第一个先放,取出的就是第一个。当你往队列中加对象时调用add()方法,它把这个对象加在队列的尾部。但是,还有一种队列(Quoto),它跟List有点区别,我打个比方:List和Quoto就相当于一间教室,然后,n个有先后顺序人就相当于它们中的对象,List的用法是,它可以允许n个人同时进入教室,但Quoto不允许n个人同时进入教室,它规定,在第一个人出来之前,教室的门是关着的,也就是说,后一个人必须在前面一个人出来之后才能进入到教室中。还有点不同就是:List遵循的是先放先取的原则,但,Quoto遵循的是先放后取的原则。队列中的对象不仅可以通过迭代器(Iterator)去取,而且可通过下标去取。如果遇到在某个特定的位置插入元素,或者根据位置获取对象等等,凡是牵扯到顺序的,都可以用队列。
3.映射(Map)
在我们现实生活中常常看到这样一种集合,身份证号与个人,IP地址与主机等,这样一种一一对应的关系就是映射。映射也是一种接口,它也不能创建对象,只能通过它的子类创建对象,它常有的子类有HashMap和Hashtable.Map中存放的是两种对象,一种称为key(键),一种称为value(值),它们两是一一对应关系,在Map中,key值不能重复,但value的值可以重复,就像身份证号与个人一样,人的名字可以相同,但是身份证号却不能相同。向Set和List中添加对象时,都是通过调用add()方法,而在Map中,是通过put(K,V)方法向其加入对象的。而且取对象时也是通过迭代器。不过它取对象时比前两种复杂,它首先要得到key的set集合,然后通过调用get(key)的方法,得到value值,然后在取出。今天做题目时,明显就体会到了HashMap的方便性,我们今天做的题目是:首先定义一个一维数组,一维数组的值已经给定了,要求我们统计一维数组中相同元素的个数,我用的是比较原始的方法,通过for循环比较,若相同,则计数器+1,写的比较繁琐。大家在看下这个程序,是通过用到HashMap里的方法做的。
Public static HashMap<Integer,Integer> count(int [] array){

HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();//创建一个HashMap得对象,用来放数字以及该数字出现的次数
for(int i=0;i<array.length;i++){
int number=array[i];
if(map.containsKey(number)){//如果map里面包含number键
int value=map.get(number);//就可以通过get函数得到number对应的value的值
value++;//使次数加1
map.put(number, value);
}
else{//如果map里面不包含number键
map.put(number, 1);//number的次数只有一次
}
}
return map;
}
我觉得这个方法比我先前写的那个方法有水平多了,当遇到像这种统计相同元素的个数时可以用HashMap方法,这样会给我们带来很多方便。[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值