Java集合框架比较

 

数组类 Array是 Java中最基本的一个存储结构。它用于存储一组连续的对象或基本类型的数据。其中的元素的类型必须相同。

Array是最有效率的一 种:

1、效率高,但容量固定且无法动态改变。 Array还有一个缺点是,无法判断其中实际存有多少元素, length只是告诉我们 Array的容量。

2、 Java中有一个 Arrays类,专门用来操作 Array,提供搜索、排序、复制等静态方法。 equals():比较两个 Array是否相等, Array拥有相同元素个数,且所有对应元素两两相等。 fill():将值填入 Array中。 sort():用来对 Array进行排序。 binarySearch():在排好序的 Array中寻找元素。 System.arraycopy(): Array的复制。

Java Collections Framework成员主要包括两种类型,即: Collection和 Map类型。 在 Java中提供了 Collection和 Map接口。其中 List和 Set继承了 Collection接口; Vector、 ArrayList、 LinkedList三个类实现 List接口, HashSet、 TreeSet实现 Set接口, HashTable、 HashMap、 TreeMap实现 Map接口。由此可见, Java中用 8种类型的基本数据结构来实现其 Collections Framework;下面分别进行介绍。

Vector:基于 Array的 List,性能也就不可能超越 Array,并且 Vector"sychronized" 的 ,这个也是 Vector和 ArrayList的唯一的区别。

ArrayList:同 Vector一样是一个基于 Array的,但是不同的是 ArrayList不是同步的 。所以在性能上要比 Vector优越一些,但 是当运行到多线程环境中时,可需要自己在管理线程的同步问题。从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快。

LinkedList: LinkedList不同于前面两种 List,它不是基于 Array的,所以不受 Array性能的限制。它每一个节点( Node) 都包含两方面的内容:

1、节点本身的数据( data);

2、下一个节点的信息( nextNode)。所以当对 LinkedList做添加,删除动作的时候 就不用像基于 Array的 List一样,必须进行大量的数据移动。只要更改 nextNode的相关信息就可以实现了所以它适合于进行频繁进行插入和删除操 作。这就是 LinkedList的优势。 Iterator只能对容器进行向前遍历,而 ListIterator则继承了 Iterator的思想,并提供了对 List进行双向遍历的方法。

List总结:

1、所有的 List中只能容纳单个不同类型的对象组成的表,而不是 Key- Value键值对。例如: [ tom,1,c ];

2、所有的 List中可以有相同的元素,例如 Vector中可以有 [ tom,koo,too,koo ];

3、所有的 List中可以有 null元素,例如 [ tom,null,1 ];

4 、基于 ArrayListVectorArrayList )适合查询,而 LinkedList (链表)适合添加,删除操作 。

HashSet:虽然 Set同 List都实现了 Collection接口,但是他们的实现方式却大不一样。 List基本上都是以 Array为基础。但是 Set则是在 HashMap的基础上来实现的,这个就是 Set和 List的根本区别。 HashSet的存储方式是把 HashMap中的 Key作为 Set的 对应存储项,这也是为什么在 Set中不能像在 List中一样有重复的项的根本原因,因为 HashMap的 key是不能有重复的。 HashSet能快速定位 一个元素,但是放到 HashSet中的对象需要实现 hashCode()方法 0。

TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类 Comparable和 Comparator。一个类是可排序的,它就应该实现 Comparable接口。有时多个类具有相同的排序算法,那就不需要重复定义相同的排序算法,只要实现 Comparator接口即可。 TreeSet是 SortedSet的子类,它不同于 HashSet的根本就是 TreeSet是有序的。它是通过 SortedMap来实现的。

Set总结:

1、 Set实现的基础是 Map( HashMap);

2、 Set中的元素是不能重复的,如果使用 add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象; Set里的元素是不能重复的,那么用什么方法来区分重复与否呢 ? 是用 ==还是 equals()? 它们有何区别 ? Set里的元素是不能重复的,即不能包含两个元素 e1、 e2( e1.equals( e2))。那么用 iterator()方法来区分重复与否。 equals()是判读两个 Set是否相等。 ==方法决定引用值 (句柄 )是否指向同一对象。

HashMap、 TreeMap、 Hashtable:

1、 HashMap也用到了哈希码的算法,以便快速查找一个键, TreeMap则是对键按序存放,因此它有一些扩展的方法,比如 firstKey(),lastKey()等。

2、 Hashtable:不允许空( null)键( key)或值( value), Hashtable的方法是 Synchronize的,在多个线程访问 Hashtable时,不需要自己为它的方法实现同步,而 HashMap 就必须为之提供外同步。 Hashtable和 HashMap采用的 hash/rehash算法都大概一样,所以性能不会有很大的差异。

3、 HashMap和 Hashtable的区别: HashMap是 Hashtable(线程案例的 )的轻量级实现(非线程安全的实现),他们都完成了 Map接口。主要区别在于 HashMap 允许空( null )键 ( key )或值( value, 非同步,由于非线程安全,效率上可能高于 Hashtable。

Map总结:

是一种把键对象和值对象进行关联的容器, Map有两种比较常用的实现: HashTable、 HashMap和 TreeMap。

 

转载自http://www.blogjava.net/jicheng687/archive/2011/03/07/345879.html

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的医院后台管理系统实现了病房管理、病例管理、处方管理、字典管理、公告信息管理、患者管理、药品管理、医生管理、预约医生管理、住院管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让医院后台管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值