程序员

JavaSE之集合框架

什么是集合框架:   为了表示和操作集合而规定的一种统一的标准的体系结构,任何集合框架都包含三大块内容:对外的接口,接口的实现和对集合运算的算法.以下是集合中的类和接口:

Vector:(增加add,删除remove,修改set,查询get,返回储存元素个数:int size()等等)所有的方法都是用了synchronized修饰符;线程安全但是性能不高

Stack:继承Vector把数组最后一个元素位置作为栈顶.要实现栈的存储底层可以数组来储存,也可以使用链表来存储.

ArrayList:所有的方法都没有使用synchronized修饰符,性能高但是线程存在不安全问题(由于常用方法太多,具体查看API最好,我这里不做太多的举例.)

ArryList已经完全取代了Vector类.

LinkedList:实现单向队列和双向队列的接口,自身提高了栈操作方法,链表操作的方法.它擅长操作头和尾的节点.无论是以上三种类的哪一种类都有共同的特点:

(1):允许元素重复的;

(2):会记录先后添加的顺序.ArrayList:擅长查询和修改操作LinkedList:擅长插入和删除操作.Itertor:迭代器对象,只能从上往下迭代.其共有四种迭代方式,举其一种用while循环迭代.Iterator it=List.iterator();  while(it.hasNext()){System.out.println(it.next());}

Listiterator:是iterator接口的子接口,支持双向迭代,从上往下迭代,从下往上迭代.Enumeration:古老的迭代器已经被iterator完全取代.

泛型:广泛通用的类型,代码模块中的不确定,谁调用该段代码,谁指明类型是什么.为什么要使用泛型?

储存任意类型的数据在集合中,但是取出来都是Object类型,此时就得强转.

Set:不允许元素重复,不会记录元素的先后添加顺序.

HashSet:是Set接口最常用的实现类,底层采用了哈希表算法.其存在的意义是提供了查询速度,插入速度也比较快,但是适用于少量的数据插入.

LinkedHashSet:底层采用了哈希表和链表的算法.哈希表:来保证唯一性,此时就是HashSet,没有记录先后顺序.链表:来记录元素的先后插入顺序.

TreeSet:调用集合元素的compareTo方法来比较元素的大小关系,然后讲集合元素按照升序排列.

Map:是把Set的集合对象作为Map的key,再用一个Object常量为value.

HashMap:采用哈希表算法,此时Map中的key不会保证添加的先后顺序,key也不能重复.

key判断重复的标准是:key1和key2是否equals为true,并且hashCode相等.

TreeMap:采用红黑树算法,此时Map中的key会按照自然顺序或定制排序进行排序.key不允许重复.

key判断重复的标准是:compareTo/compare的返回值是否为0.

LinkedHashMap:采用链表和哈希表算法:此时Map中的key会保证先后的添加顺序,key不允许重复

key判断重复的标准是:key1和key2是否equals为true,并且hashCode相等.

Hashtable:采用哈希表算法,是HashMap的前身(类似于Vecotr是ArrayList的前身),一般不用Properties:Hashtable的子类,此时要求key和value都是String类型,用来加载资源文件HashMap和TreeMap,LinkedHashMap都存在线程不安全,但是性能较高,解决办法:Map m=Collections.synchronizedMap(Map对象);哈希表算法做等值查询最快,数据结构算法做范围查询最快,应用到索引。

关于选用哪一种容器取决于每一种容器的储存特点以及当前的业务需求:

List:单一元素集合,允许元素重复,记录元素的添加顺序,

Set:单一元素集合,不允许元素重复,不记录元素的添加顺序.既要保证不重复,又要保证先后顺序使用:

LinkedHashList.List和Set以及Map之间的相互转换问题:

List list=new ArrayList<>();

Set转化为List:

List list1-new ArrayList<>(set)

List转化为Set:

Set set=new ArrayList<>)(list)

Map不能直接转化为List或Set(但是Map中的方法可以间接转化).

集合操作的工具类:

(1):Arrays类:在Collection接口中有一个叫toArray把集合转化为Object数组.把集合转化为数组:Object[] arr=集合对象.toArray();数组也可以转化为集合(List集合):

public static ListasList(T…a)

等价于

public staticListasList(T[] a)

(2)Conllections类:封装了Set,List,Map的操作的工具方法.获取空集对象(没有元素的集合,集合不为null)。

第一次写,写得不好,请大家多多指教。