java容器:java
容器,顾名思义,就是用来存放东西的道具,可是在咱们程序开发中容器的概念就是用来存在咱们数据对象的引用。
数组
往常的数组存储,因为数组开始的长度已经指定,开发过程当中不能随意修改,致使了后续的麻烦,并且在存放的类型还必须是相同的类型,所以java API给开发者提供了java 容器,java内的容器类都是继承了Collection接口,再次在进行扩展。
安全
java内的容器主要有List, Set,Map三种框架
1:List 继承了Collection接口,他的主要实现类主要有ArrayList和LinkedList,Vector,其中ArrayList是顺序结构动态数组表,LinkedList是链表,Vector是向量,Stack实现了Vector,Vector和Stack如今不常常用。下面简要看一下ArrayList和LinkedList异步
ArrayList:容许null元素,读取速度比较快,可是修改起来比较麻烦,须要将数组总体后移,他的存储空间是连续的spa
LinkedList:读取速度比ArrayList慢,可是修改起来容易,若果删除或者新增只须要修改指针的指向就行,他的存储空间是不连续的。线程
Vector:是线程安全的。用的比较少了指针
2:set继承了Collection接口,他的主要实现类HashSet,set是数学中定义的集合,因此set中的数据没有顺序并且不容许重复,HashSet中存放的是只是对象的值。orm
2:Map没有继承collection接口,它提供了Key-value的键值对映射,不容许key值有重复,若是有重复那么他会覆盖。他的主要实现类为HashMap和HashTable,TreeMap,LinkedHashMap,WeakHashMap,IdentifyHashMap,咱们日常用的比较多的就是HashMap和Hashtable,二者比起来,HashMap是异步的,他提供的键值对的映射,容许null,HashTable是线程安全的,但不容许插入null,对象
注意一点就是HashMap和HashSet,HashTable的区别:
HashMap:实现了map接口,因为他是异步的,因此线程不是安全的,若是须要实现线程安全须要用Collection框架下其余路径进行实现,他存放的是键值对,容许为空的值(key和value)均可以,他是用来取代Hashtable的,他计算哈希值是经过键值对来计算,此外他的访问速度比较快,由于他经过一个惟一的key来检索对象,他用put进行添加元素;hashmap采用HashMap.entrySet().iterator()方法进行遍历
HashSet:实现了set接口,存放的对象指,不容许空的对象,他计算哈希值是经过成员对象来计算哈希值,此外他的访问速度比HashMap慢,他用add进行元素的添加;
HashTable:他实现了map接口,可是他是线程安全的,他不容许插入null值,Hashtable遍历使用Enumeration()进行遍历,
可是java程序中对set用的比较少,此外HashMap是在jdk5版本以上用来替代Hashtable的,HashMap的线程安全采用Collections.synchronizedMap(hashmap)的方法。
咱们日常用的多的是HashMap,ArrayList,LinkedList比较多,Vector和Stack以及set,Hashtable用的比较少,
HashMap,ArrayList,LinkedList三个都不是线程安全的。