java集合-笔记

1、java集合大致分为set,list,queue,map四种体系。
set 无序,不可重复
list有序,可以重复
map 具有映射关系
queue 队列集合
2、java集合类由两个接口派生而出,collection和map
collection派生出set,queue,list
3、常用的实现类有HashSet,TreeSet,ArrayList,ArrayDeque,LinkedList,HashMap,TreeMap
4、boolean retainAll(Collection C)相当于求两个集合的交集。 (从集合中删除集合C里不包含的元素)
5、LinkedHashSet在HashSet的基础上,使用了链表记录集合元素的添加顺序。
6、TreeSet是根据元素实际值的大小进行排序的。treeset采用红黑树的数据结构来存储集合元素。treeset支持两种排序方法,自然排序和定制排序。默认采用自然排序。
如果希望treeset正常运作,treeset只能添加同一种类型的对象。 
7、与set相比,set提供了iterator(),list还额外提供了listiterator方法,这个方法增加了向前迭代的功能(iterator 只能向后迭代),此外还可以通过add方法向集合中添加元素(iterator 只能删除元素)。
8、arraylist和vector类都是基于数组实现的list类,它们封装了一个动态的,允许再分配的object数组。arraylist或vector对象使用initialcapacity参数设置该数组的长度,当添加元素超过该数组长度时,它们的initialcapacity会自动增加。
       如果向arraylist或者vector集合中添加大量元素,可以使用ensurecapacity(int mincapacity)方法一次性增加initialcapacity。这样可以减少重分配的次数,从而提高性能。
      创建空的,不指定initialcapacity参数,则object数组默认长度为10.
    vector是一个古老的集合(JDK1.0就有了),vector还是有很多缺点的,所以尽量少用vector。用arraylist就够啦。
9、arraylist是线程不安全的,可以用collections工具类,它可以将一个arraylist变成线程安全的。
10、stack继承自vector,所以它也是个古老的java集合类,同样是线程安全但性能较差。尽量少用。
    如果程序中需要使用栈,可以用arraydeque,它既实现了list接口,也实现了deque接口。由于实现了deque接口,所以可以作为栈来使用。arraydeque不仅可以作为栈,也可以作为队列来使用。
11、queue接口有一个priorityqueue实现类。此外,queue还有个deque接口,deque代表一个双端队列,可以同时从两端来添加,删除元素。所以deque的实现类可以用作队列,可以用作栈。deque有arraydeque 和 linkedlist两个实现类。
12、priorityqueue保存队列元素的顺序不是按照加入队列的,先进先出的顺序。而是按照队列元素的大小进行重新排序。
   和treeset一样,有自然排序,定制排序两种排序方式。
13、linkedlist可以当做双端队列使用,既可以当做栈,也可以当做队列。linkedlist可以作为list集合,双端队列,栈等,功能很强大哦。
14、collections可以将集合包装成线程安全的集合。
15、java源码来看,java先实现了map,然后通过包装一个所有value都为null的map就实现了set集合。
16、map提供了大量的实现类,如hashmap,hashtable等。
17、HashMap和Hashtable都是map接口的典型实现类。它们之间的关系类似于ArrayList和Vector的 关系。HashTable是个古老的实现类。
   从命名就能看出来,都没有遵守java的命名规范:每个单词的首字母应该大写。
   同理,尽量少用Hashtable。即使需要创建线程安全的类,可以通过collections工具类把HashMap变成线程安全的。
   Hashtable不允许使用null作为key和value。但是HashMap里的key可以有一个null(key不能重复),而value可以有多个null。
18、collections是用来操作集合的工具类。
该工具类提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了将集合对象设置为 不可变、对集合对象实现同步机制等操作。

你可能感兴趣的:(java集合-笔记)