集合框架学习笔记

一、为什么使用集合框架?

    1. 数组长度固定不变,不能很好适应元素数量动态变化的情况。
    2. 可通过数组名.length获取数组的长度,却无法直接获取数组中真实存在的对象个数
    3. 数组采用的是内存中分配连续空间的存储方式,根据下标查找对象信息时效率低。
    4. 在存储狗狗信息时,希望分别存储狗狗昵称与狗狗信息,两者具有一一对应的关系,狗狗昵称作为狗狗信息的关键存在,可以根据昵称获得狗狗的信息吗?显然数组是解决不了的

二、 接口分类(重点) ? 

 1、Collection:存储重复、无序对象
          List:存储重复、有序对象
          Set:存储唯一、无序对象
    2、Iterator:定义访问和遍历元素的接口(水瓢)见下面迭代器详解
    3、Map:存储键值对象,(key,唯一,无序)(value,重复,无序)
    4、Collection是容器的根接口,但不是最上面的超级接口,最上面的超级接口是Iterator迭代器接口。因为上帝造不出来,即无序又有序这种互斥的东西。

三、常用集合?

ArrayList:

特点:实现了长度可变的数组,在内存中分配连续的空间。
优点:遍历元素和随机访问元素的效率比较高

Vector 底层是使用了Object数组实现 的, 实现原理与ArrayList 是一致的,但是是线程安全的,操作效率低。

LinkedList:

特点: 采用链式存储方式
优点:插入、删除,修改元素时效率比较高
      类似铁链,每个环都扣在一起,要想插入一环,只需要拆开上环和下环就可以插入一环。删除:哪一环不想要,拆开上环和下环把间环拿掉就可以了
缺点:  找的时候麻烦
       对于单链来讲,我只知道next下一个,只记下一个地址,但是下下一个地址我是不知道的,比如打电话
       单链:上一环记下一环地址,从一个方向找头→尾,或从尾→头,用next()方法找
       双链:每一个元素都要记上一个地址和下一个地址

 

HashMap:

特点:采用哈希表的存储方式
优点:查询指定元素效率高

Hashtable 和HashMap的异同 :
    相同:
        都采用哈希表存储方式,实现原理相同,功能相同
    区别:
        ①Hashtable继承自Dictionary类,而HashMap实现了Map接口
        ②Hashtable是线程安全的;HashMap是线程非安全的,它重速度、轻安全
        ③Hashtable不允许null值(key和value都不允许),HashMap允许null值(key和value都允许)

HashSet:

 特点: 存取速度快。

HashSet存储元素的原理:
    往hashSet添加元素的时候,首先会调用元素的hashCode方法得到元素的哈希码值,然后把哈希码值经过运算算出该元素存在哈希表中的位置。
    情况1:如果算出的位置目前还没有存在任何的元素,那么该元素可以直接添加到哈希表中。      
    情况2: 如果算出的位置目前已经存在其他的元素,那么还会调用元素 的equals方法再与这个位置上 的元素比较一次。
    如果equals方法返回的是true,那么该元素被视为重复元素,不允许添加。如果equals方法返回 的是false,那么该元素也可以被添加。

Treeset:

1. 往TreeSet添加元素 的时候,如果元素具备自然顺序的特点,那么TreeSet会根据元素 的自然顺序特性进行排序 存储。
2. 往TreeSet添加元素 的时候,如果元素不具备自然顺序的特点,那么元素所属的类就必须要实现Comparable接口,把比较的规则定义在CompareTo方法上。
3. 往TreeSet添加元素 的时候,如果元素不具备自然顺序的特点,那么元素所属的类就也没有实现Comparable接口,那么在创建TreeSet对象的时候必须要传入比较器对象。

迭代器Iterator :

作用:
        专门实现集合的遍历。
        Collection接口的iterate()方法返回一个Iterator,通过Iterator接口的两个方法即可方便的实现遍历
方法:
        boolean hasNext( ):判断是否存在另一个可访问的元素
        Object next( ):返回要返回的下一个元素

 泛型 :使用泛型集合在创建集合对象时指定集合中元素的类型,在从集合中取出元素时无序进行强制类型转换,避免了ClassCastException异常。

 

 源码学习:http://www.cnblogs.com/pony1223/articles/3189946.html

 

转载于:https://www.cnblogs.com/abernhong/p/8661366.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值