Java基础篇(四——3)——集合接口大比拼
2017-01-24 14:49
302 查看
引言:
对比学习——让学习更加高效!概述:
本篇博客重点介绍Java主要接口的区别与联系,通过对比理解各个接口的工作原理,以及适用的场合。内容:
一 Collection与Collections?主要是概念上的区别,Collection是集合类的上级接口,由Set和List继承;Collections是集合的一个帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
二 List和Map区别?
(1)用途不同:List存储单列数据的集合;Map存键和值双列数据的集合
(2)存储规则不同:List中存储的数据有序且允许重复;Map中存储的数据无序且键不能重复,键对应的值可以重复。
(3)原理:List、Set继承自Collection接口;Map不是。
三 List、Map、Set如何存取元素?
(1)Set继承父接口Collection,存对象:Set集合不允许有重复的元素,不能有俩个相等(不仅仅是相同)的对象,Set集合的add方法包含一个boolean的返回值,集合中没有某个对象,该对象成功加入集合Set,返回true,反之返回false;取对象:Set集合没法取某一个对象,只能通过Iterator取得所有对象,然后再逐一遍历得到需要的对象。
(2)List表示有序集合,存对象:List调用add(Obj
e)方法存入一个对象,存入的对象按照先后的顺序在集合中排序,也可以通过调用add(int index,Obj
e)在特定位置插入一个对象。一个对象可以在List集合中反复存储,不过并不是把这个对象本身多次放入集合中,而是集合中多个索引值指向同一个对象;取对象:List除了可以通过Iterator接口取得所有元素,然后遍历取值外,还可以调用get(index
i)来获得所需某个对象。
(3)Map存储双列数据对象。存对象:Map通过方法put(obj
key, obj value)方法存储对象,每次存储一对key/value对象,不能存储重复的key值,通过equals方法比较相等。取对象:通过get(Object
key)方法,根据科研获得相应的value值,也可以获得所有key集合,或者所有value的集合,再或者key和value组成的Map.Entry对象的集合。
四
ArrayList和Vector的联系与区别?
(1)这俩个类都实现了List接口(List接口继承Collection接口),都属于有序集合zset,相当于一种动态的数组,可以按索引号取出某个元素,同时其中的数据允许重复。反观HashSet子类的集合不可以按索引去检索其中的元素,也不允许有重复的元素。
(2)区别:
1)同步性:Vector是线程安全的,方法之间线程同步;而ArrayList是线程不安全的,方法之间线程不同步。一个线程访问集合使用ArrayList效率更高,反之则使用Vector,不用编写线程安全的代码。
2)数据增长:ArrayList与Vector都有一个初始的容量大小,当存储元素个数超过容量,Vector可以设置增长的空间大小,默认增长为原来的俩倍;而ArrayList没有提供设置增长空间的方法,文档中也没有明确规定,若可以增长,增长为原来的1.5倍;总之,Vector增长原来的一倍,ArrayList增加原来的0.5倍。
(3)备注:vector与Hashtable是java1诞生的,支持线程安全;ArrayList与HashMap是java2提出的,不支持线程安全。
五ArrayList、Vector、LinkedList存储性能和特性
(1)ArrayList和Vector都使用数组方式存储数据,支持索引检索数据,插入数据较慢;
(2)Vector使用线程安全(synchronized方法),性能比ArrayList较差
(3)LinkedList使用双向链表实现存储,索引数据需要进行前向或后向遍历,插入数据通过指针记录前后项,性能较快。LinkedList也是线程不安全的,通过一些方法可以将LinkedList当做堆栈和队列来使用。
六
HashMap和Hastable区别与联系
(1)联系:
1)HashMap是Hashtable轻量级的实现,都完成了Map接口。
2)俩者采用的hash/rehash算法大致相同,性能差异不会太大
(2)区别:
1)来源不同:Hashtable基于Dictionary类,HashMap是java1.2引入Map接口的一个实现
2)线程安全:Hashtable线程安全的;HashMap线程不安全的。
3)HashMap可以将空值作为一个表条目的key或者value。
总结:
通过各大接口的对比,能够了解各个接口不同的适用场合,提高我们处理数据的效率和效果。相关文章推荐
- java并发编程学习之 线程池2(线程关闭)
- java写个纪念日
- JAVA实现的简易FTP站点
- springmvc和mybatis整合-查询用户列表
- spring boot security oauth2 实现第三方登录
- Spring的事务管理器
- JDK源码(1.7) -- java.util.Iterator<E>
- java文件上传(单文件 多文件)与删除
- Java Web初探,我的第一个Servlet
- Spring Boot 入门
- Java 基本类型的长度
- 猫哥带你去战斗——Java Web开发——网页篇[6]——布局
- Java传入用户名和密码并自动提交表单实现登录到其他系统的实例代码
- Java+mysql本地图片上传数据库及下载示例
- 猫哥带你去战斗——Java Web开发——网页篇[4]——表单
- 关于在多线程情况下同步爬虫爬取结果的一个例子
- 「一句话金典」Spring轻量级框架
- eclipse环境搭建ssh(Struts2+Spring2.5+Hibernate3)框架小谈(下)
- 猫哥带你去战斗——Java Web开发——网页篇[3]——继续基本标签
- 10 Java并发编程5-线程池的使用