数组类Array是java中最基本的一个存储结构,它用于存储java
一组连续的对象或一组类型相同的基本类型的数据。 算法
Array特色:效率高,但容量固定且没法动态改变,数组
缺点:没法判断其中存有多少元素,length只是告诉咱们Array的容量.多线程
Arrays类: 专门用来操做Array,提供搜索,排序,复制等框架
静态方法. 性能
Arrays中equals():比较两个Array是否相等,Array拥有相同元素个数,且全部对应元素两两相等.spa
fill():将值填入Array中.线程
sort():用来对Array进行排序.对象
binarySearch():在排好序的Array中寻找元素.排序
System.arraycopy():Array的复制.
Vector:基于Array的List,性能也就不可能超越Array,而且Vector
是“sychronizend”的,这个也是Vector和ArrayList的惟一区别.
ArrayList:同Vector同样是一个基于Array的,但不一样的是ArrayList
不是同步的.因此在性能上要比Vector优越一些,可是运行到多线程环境
中时,须要本身管理线程的同步问题.从其命名中能够看出它是一种相似数组的形式进行存储,所以它的随机访问速度特快.
LinkedList:LinkedList不一样于前面两种List,它不是基于Array的.
由于是基于链表实现的,data,(节点自己数据)nextNode(下一个节点)
因此更适用于 插入,删除操做.
【注意全部的List能够有null元素,元素能够重复】
移除List重复元素:
方法一:经过HashSet剔除 (本人喜欢使用的方式:使用的是hash数组不能产生重复数据的特性,来转换LIST)
}
HashSet:set同list同样都实现了Collection接口,可是他们的实现方式却大不同. 【list是以Array为基础的,而Set则是HashMap的基础上实现的】
HashSet的存储方式是把HashMap中的Key做为Set的 对应存储项,这也是为何在Set中不能像在List中同样有重复的项的根本缘由,由于HashMap的key是不能有重复的。HashSet能快速定位 一个元素,可是放到HashSet中的对象须要实现hashCode()方法0。
TreeSet:Treeset将放入其中的元素按序存放,这就要求你放入其中的
对象时可排序的,这就用到了集合框架提供的另外两个实用类
Comparable和Comparator。
【一个类是可排序的,它就应该实现Comparable接口.】
【有时多个类具备相同的排序算法,那就不须要重复定义相同的排序算法,只要实现Comparator接口便可】
TreeSet是SortedSet的子类,它不一样于HashSet的根本就是TreeSet
是有序的,它是经过SortedMap来实现的.
HashMap:也用到了哈希码的算法,以便快速查找一个键,
TreemMap对键按序存放,所以它有一些扩展的方法,好比firstkey(),lastkey()等. 当多个线程访问treemap时,要本身为之提供外同步.
HashTable:不容许空键或值.Hashtable的方法是Synchronize的,
在多个线程访问Hashtable时,不须要本身为它的方法实现同步.
【Map有两种比较经常使用的实现:HashTable.HashMap和TreeMap.】