java的集合类

         做项目过程中,HIbernate 框架会经常使用到集合类型,比如Set,List,Iterator这些接口,记得我在hibernate多对一映射中双向关联使用hashset遇到这样的问题:

         Set<Employee> emps = new HashSet<Employee>();
         emps.add(emp2);            
         depart.setEmps(emps); 

          ...........................................................
         HashSet hs = (HashSet) depart.getEmps();//会出现异常java.lang.ClassCastException:org.hibernate.collection.PersistentSet

         在网上找了下答案,出现异常的原因是:hiberate内部做了处理,为了完成懒加载的功能,它把Java的所有集合类都重新写了一遍,

          就是说虽然保存的是HashSet,但是一保存完,就换成PersistentSet了,PersistentSet实现了Set这个接口,但是没有继承HashSet,它不是HashSet的子类,

         所以转换肯定出错。PersistentSet的功能比HashSet要强,这个类可以实现懒加载
         对Hibernate的持久化类来说,里面的定义不能定义成具体的类,必须定义成接口,如:private Set<Employee> emps;
         

         所以有些东西,不去注意,深究,以后还会出错,自己记录下来,只是提醒自己以后可以多想想,在这里也想把java的集合类相关的东西归纳下,这样的归纳总结在网上

        搜索一大堆,但是自己亲自记录下来,本身对自己就是个理解的过程。

          曾经看过一篇文章 http://developer.51cto.com/art/201104/255241.htm “ 我们为什么使用 java集合框架”,这篇文章的问题提的非常好,自己也想借这篇文章的问题帮

         自己归纳总结下,看到这篇文章的朋友如果我什么不对

         的地方多批评,指教.

         (1)我们为什么使用集合框架

          集合的概念,高中的时候我们都明白,就是满足一定条件的数据存在一起组成一个集合,当然 java的集合操作的都是对象,具有相同的属性,但是保存这些对象的逻辑可以各种各样,于是就有了各种各样的数据结构。我们将数据结构在Java中实现,于是就有了我们的集合框架。

         网上许多java集合框架的继承图,大家可以去参考下,对着图可以大致了解到java集合类由collection 和Map派生而来,collection 和Map是java集合类的根接口,

我们常用的Set和List接口是Collection接口派生的两个子接口

 

        Collection 接口是一组允许重复的对象:

         Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。实现类:Treeset ,hashset

         List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。 实现类:arraylist,vector,linkedlist

       Map接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的key。拥有自己的内部排列机制。 实现类:hashmap,hashtable


  到这里所以面试常会碰到这样的问题 arraylist,vector的区别,hashMap,hashtable的区别,set和map有什么关系,linkedlist和arraylist的区别

 

vector是线程安全的,用在多线程环境下,运行效率慢,而arraylist不是线程安全,是在单线程环境下

hashtable 的key和value 不允许null,是线程安全,hashmap不是线程安全的,效率高


  总结这些,关键还是自己在项目中使用,每个接口的方法可以查看jdk文档,就怕有的时候我们只停留在怎么用,还不知道为什么而用。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值