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

Java初级培训笔记------容器 (1)

2015-08-15 13:10 316 查看
先来了解一下什么是容器,而要想了解容器,那么 你必须 先知道数组 ,在java基础中 数组是一个很重要的部分,那么数组的定义是什么:用于存储相同数据类型的有序的集合,并且数组的大小在定义的时候就已经确定好了,后期是不可更改的。这句话的重点在什么地方,首先他存储的是相同类型的数据,第二他是一个集合,第三大小确定,这就是数组的特点,那么再来说容器,容器的存在就是为了解决数组的对数据类型的局限性还有对大小的限制,首先容器他也是一个集合,是一个同一个容器什么类型都可以放的且大小可以拓展的集合,就好比我要买一个收纳盒,我买一个内衣收纳盒,那么理论上来说我这里边只能放内衣,而且格子都已经确定好了比如说4*4的你就可以放16个内衣多了放不了了(理论上,你实在往里塞我也没办法),这就是数组,那么我现在买一个普通的收纳盒,那么我什么都可以放,衣服啊,内衣啊,你只要不嫌脏袜子,臭鞋你都往里边放,那么现在他满了怎么办呢,在容器中有一个特性就是可以自动拓展,比如说容器中的ArrayList,在定义时虚拟你为他定义了一个容量为10的数组,你不超过这个长度你可以随便放,当超过这个长度之后他会按照
新容量=(原容量*3)/2+1的比例进行扩容,你只要不超过JVM的运行内存你怎么拓展都成。现在讲完了什么是容器然后现在讲一下他的继承体系。

容器有两个体系:一个是接口Collection跟接口Map,这两个接口除了都跟容器有关基本没啥关系,也没有等级差距,要说区别的话就是Collection的实例里存的都是单列元素,Map接口的实现里存的是一个<K,V>键值对,一个键对应一个值,也就是双列元素。(强行解释....我现在了解到的就这么多)。

先来讲Collection接口:常用的子接口有List和Set接口,两个接口的最主要的区别就是List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。还有一点就是List的存储是有序的,这里的有序并不是说排序,而是说好比排队一样,我要想往里存,我就要排着队来,挨个往里进,当然
如果你是VIP你调用一个插入方法,也是可以插队的。

List的常用实现类主要有Vector,ArrayList以及LinkedList。Vector,ArrayList都是实现List接口继承AbstractList抽象类,LinkedList则是实现List接口继承AbstractSequentialList(看不懂没关系)抽象类,重点在于该抽象类继承自AbstractList抽象类,所以从这点来说他的三个实现类是没有区别的,现在说一下他们的区别:

Vector,ArrayList以及LinkedList的区别:

ArrayList底层实现数组,线程不安全但是效率快,查询快
插入,删除,修改慢。

Vector
线程安全,即线程同步效率慢,他实现的也是数组,所以也是查询快一点。

LinkeList底层实现链表 ,线程不安全但是效率快,插入,删除,修改快,但是查询慢。

Set的实现类主要有TreeSet跟HashSet:

区别于联系:

TreeSet是有序集合:会对保存的元素进行排序(1 按照自然顺序排序 2 按照你指定的比较器进行排序,底层为二叉树。

HashSet是由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变,将需要存储的数据,保存在n桶中,根据需要保存的元素的hashCode() 值,将元素分布在n个桶中。进行迭代所需的时间与HashSet 实例的大小(元素的数量)和底层
HashMap 实例(桶的数量)的“容量”的和成比例。

而对于Map主要有HashMap :不同步(线程不安全)hashTable:同步(线程安全)。

本次主要大体介绍一下容器及主要实现类的区别与联系,具体应用参见Java初级培训笔记------容器 (2)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: