您的位置:首页 > 编程语言 > Java开发

java容器学习

2015-12-17 00:00 169 查看
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元素,读取速度比较快,但是修改起来比较麻烦,需要将数组整体后移,他的存储空间是连续的

LinkedList:读取速度比ArrayList慢,但是修改起来容易,若果删除或者新增只需要修改指针的指向就行,他的存储空间是不连续的。

Vector:是线程安全的。用的比较少了

2:set继承了Collection接口,他的主要实现类HashSet,set是数学中定义的集合,所以set中的数据没有顺序而且不允许重复,HashSet中存放的是只是对象的值。

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三个都不是线程安全的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 容器 list map set