Java集合框架阅读笔记

Java核心技术 卷I
阅读集合章节笔记

1、Java的集合类库将接口和具体实现分离。

2、队列接口指出可以在队列的尾部添加元素,在队列的头部删除元素,并且可以查找队列中元素的个数。
按照先进先出原则。

3、Java中的队列:
ArrayDeque表示底层是循环数组实现
LinkedList表示底层是链表实现

4、接口本身并不能说明哪种实现的效率更好。一般而言,循环数组队列比链表队列更高效,但是循环数组是一个有界集合,即容量有限

5、一组以Abstrct开头的类,这些类是为类库实现者设计的。也就是说,编写自己的类,扩展AbstractQueue类比实现Queue接口要简单很多。
在Java中,如果实现接口就必须实现所有的方法,Collection接口中的方法很多,把每一个方法都实现很麻烦。于是采用Abstract类,就可以简化操作。

6、集合类的基本接口是Collection接口

7、集合类的迭代器接口Iterator,方法包含next和hasNext,remove

8、集合类的枚举接口Enumeration,方法包含nextElement和hasMoreElements。

9、Iterator和Enumeration区别:
Iterator可以删除元素,Enumeration不可以删除元素;
使用Iterator来遍历集合时,应使用Iterator的remove()方法来删除集合中的元素,使用集合的remove()方法将抛出ConncurrentModificationException异常。

10、Iterator是Enumeration的下一代产品。

11、Java迭代器实在两个元素之间的,当调用next时,迭代器就会越过下一个元素,并且返回刚刚越过元素的引用。如果没有越过任何元素,就去调用remove方法,就会跑出IllegalStateException异常。
也就是说remove方法是必须依赖next方法的。

12、Collection和Iterator都属于泛型接口,可以编写操作任何集合类型。

13、以Map结尾的类实现了Map接口;剩下的都是实现了Collection接口。

14、以数组作为底层实现的数据结构的缺点:在中间位置删除或者插入一个元素,都需要移动大量的元素。但是优点就是:随机访问速度非常快。

15、以链表作为底层实现的数据结构的缺点:随机访问必须从头开始,速度慢。但是优点就是:在中间位置删除或者插入非常的方便。

16、链表是一个有序集合,所以每个元素的位置都是很重要的,add方法都是直接添加到链表的尾部。但是经常要在链表的中间添加元素,迭代器是描述集合位置的,所以添加到中间位置的add方法由迭代器负责。

17、List接口的实现者专用迭代器ListIterator。底层是链表,有序集合,迭代器里面有add方法向链表中间位置插入元素。同时,ListIterator还有前一个元素的引用。ListIterator的set方法可以修改元素的值

18、使用链表的唯一理由就是尽可能减少在列表中间插入或者删除元素所付出的代价。

19、Vector类的所有方法都是同步的,可以由多个线程安全地操作一个Vector对象。但是,如果只有一个线程访问Vector,代码在同步上会耗费大量时间。所以不需要同步的时候使用ArrayList。

20、链表和数组可以按照我们意愿排列元素的次序,但是,如果想要查看某个指定的元素,但是又忘记了它的位置,就需要访问所有元素,直到找到为止。如果元素很多,耗费的时间会很多。

21、散列表会为每一个对象都计算一个整数,成为散列码。这个散列码由hashCode方法产生。如果自定义类,就要负责实现这个类的hashCode方法。

22、在Java数组中,散列表用数组实现。每个列表被称为桶。要想查找表中对象的位置,就要先计算散列码,然后与桶的总数取余,所得到的结果就是保存这个元素的桶的索引。

23、Java中的Set集合,表示没有重复元素的集合,底层采用散列表实现。

24、散列表的迭代器将会一次访问所有的桶,由于散列表元素分散在表的各个位置,所以访问一定是随机。

25、HashSet和TreeSet区别:
HashSet:元素一定是无序的且不重复的;
TreeSet:元素添加的时候是任意顺序的,但是在添加过程中,元素会被放置在正确的位置,等到我们遍历时,所有元素已经按照某种规则排好顺序。
讲一个元素添加到TreeSet中比添加到HashSet中慢,但是相比数组和链表的插入元素还是要快很多的。

26、映射表用来存放键值对。

27、实现了映射表Map接口的类有两个:HashMap和TreeMap。
HashMap:散列映射表对键进行散列
TreeMap:树映射表用键的整体顺序对元素进行排序,并将其组织成搜索树。

28、在Java中,映射表并不是一个集合,但是可以获取映射表的视图。一共3个视图:
Set keySet();//键集
Collection values();//值集合(不是集)
Set

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值