成长记录

欢迎喜欢计算机技术的朋友进来交流
 
« 上一篇: VC文件扩展名解读大全 下一篇: JAVA transient 关键字用法 »
Jason @ 2008-06-14 10:58

zz from 中国编程自学网
数组类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一样,必须进行大量的数菀贫V灰膎extNode的相关信息就可以实现了所以
它适合于进行频繁进行插入和删除操作。这就是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. 基于Array的List(Vector,ArrayList)适合查询,而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是否相等。==方法决定引用值(句柄)是否指向同一对象。

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

      HashMap也用到了哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放,因此它有一些扩展的方法,比
如firstKey(),lastKey()等。HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他
们都完成了Map接口。主要区别在于HashMap允许空(null)键(key)或值(value),非同步,由于非线程安全,效率上
可能高于Hashtable。 Hashtable不允许空(null)键(key)或值(value),Hashtable的方法是Synchronize的,在多个
线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采
用的hash/rehash算法都大概一样,所以性能不会有很大的差异。





评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定

日历
网志分类
『所有网志』 (322)
生活 (41)
工作 (11)
运动 (3)
情感 (1)
java (65)
c/c++ (16)
.net (23)
linux (6)
网络 (73)
数据结构与算法 (6)
数据库 (4)
体系结构与编译技术 (2)
Flash (0)
图形图像 (0)
黑客与系统安全 (8)
病毒 (0)
XML (1)
windows视窗 (2)
操作系统 (13)
wimax (12)
手机 (14)
数学 (4)
日语 (0)
法语 (0)
美剧 (0)
计算机硬件 (6)
站内搜索
友情链接
我的歪酷 非非共享界
订阅 RSS
0048218
歪酷博客