Java之集合框架

本文内容版权来自博客园做者博客,我的只是做为总结汇总,感谢原文做者,原文地址html

  数组类Array。是JAVA中最基本的一个存储结构。它用于存储一组连续的对象或基本类型的数据。其中的元素的类型必须相同。array是最有效率的一种。一、效率高,但容量固定且没法动态改变。 array还有一个缺点是,没法判断其中实际存有多少元素,length只是告诉咱们array的容量。 二、JAVA中有一个Arrays类,专门用来操做array ,提供搜索、排序、复制等静态方法。 equals():比较两个array是否相等。array拥有相同元素个数,且全部对应元素两两相等。 fill():将值填入array中。 sort():用来对array进行排序。 binarySearch():在排好序的array中寻找元素。 System.arraycopy():array的复制。算法

      Java Collections Framework成员主要包括两种类型,即:Collection和Map类型。 在Java中提供了Collection和Map接口。其中List和Set继承了Collection接口;同时用Vector、ArrayList、LinkedList三个类实现List接口,HashSet、TreeSet实现Set接口。直接有HashTable、HashMap、TreeMap实现Map接口。因而可知,Java中用8种类型的基本数据结构来实现其Collections Framework;下面分别进行介绍。数组

      Vector基于Array的List,性能也就不可能超越Array,而且Vector是“sychronized”的,这个也是Vector和ArrayList的惟一的区别。安全

       ArrayList:同Vector同样是一个基于Array的,可是不一样的是ArrayList不是同步的。因此在性能上要比Vector优越一些,可是当运行到多线程环境中时,可须要本身在管理线程的同步问题。从其命名中能够看出它是一种相似数组的形式进行存储,所以它的随机访问速度极快。数据结构

       LinkedList:LinkedList不一样于前面两种List,它不是基于Array的,因此不受Array性能的限制。它每个节点(Node)都包含两方面的内容:1.节点自己的数据(data);2.下一个节点的信息(nextNode)。因此当对LinkedList作添加,删除动做的时候就不用像基于Array的List同样,必须进行大量的数据移动。只要更改nextNode的相关信息就能够实现了因此它适合于进行频繁进行插入和删除操做。这就是LinkedList的优点。Iterator只能对容器进行向前遍历,而 ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。多线程

       List:1. 全部的List中只能容纳单个不一样类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ]; 2. 全部的List中能够有相同的元素,例如Vector中能够有 [ tom,koo,too,koo ]; 3. 全部的List中能够有null元素,例如[ tom,null,1 ]; 4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操做。框架

      HashSet:虽然Set同List都实现了Collection接口,可是他们的实现方式却大不同。List基本上都是以Array为基础。可是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key做为Set的对应存储项,这也是为何在Set中不能像在List中同样有重复的项的根本缘由,由于HashMap的key是不能有重复的。HashSet能快速定位一个元素,可是放到HashSet中的对象须要实现hashCode()方法0。性能

      TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具备相同的排序算法,那就不须要重复定义相同的排序算法,只要实现Comparator接口便可。TreeSet是SortedSet的子类,它不一样于HashSet的根本就是TreeSet是有序的。它是经过SortedMap来实现的。spa

      Set总结: 1. Set实现的基础是Map(HashMap); 2. Set中的元素是不能重复的,若是使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象; Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==仍是equals()? 它们有何区别? Set里的元素是不能重复的,即不能包含两个元素e一、e2(e1.equals(e2))。那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。==方法决定引用值(句柄)是否指向同一对象。线程

      Map是一种把键对象和值对象进行关联的容器,Map有两种比较经常使用的实现: HashTable、HashMap和TreeMap。

      HashMap也用到了哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放,所以它有一些扩展的方法,好比firstKey(),lastKey()等。HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口。主要区别在于HashMap容许空(null)键(key)或值(value),非同步,因为非线程安全,效率上可能高于Hashtable。 Hashtable不容许空(null)键(key)或值(value),Hashtable的方法是Synchronize的,在多个线程访问Hashtable时,不须要本身为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概同样,因此性能不会有很大的差别。

相关文章
相关标签/搜索