java基础——Collection

一、类集框架

    类集框架,是一组类和接口,存在于java.util中,主要用于存储和管理对象。

    JAVA2之前,Java提供了一些专门的类如:DictionaryVectorStackProperties存储和操作对象组。尽管这些类非常有用,但是它们缺少一个集中,统一的主题。举例:Vector的方法与Properties的方法不同。这些专门的类都都有各自专门的方法,没有被设计成易于扩展和能适应新的环境的形式。

类集框架特点:

         1.最底层存在Collection接口,在Collection接口中统一封装了实现类需要实现的方法。

         2.是高性能的。对基本类集(动态数组、链接表、树、散列表)的实现是高效的,很少需要人工去对这些“数据引擎”编写代码。

         3.框架允许不同类型的类集以相同的方式和高度互操作方式工作。

         4.类集必须是容易扩展、修改的。

所以,类集框架被设计成包含一组标准的接口。对这些接口提供了标准的实现类。

 

                                                               

二、框架详细介绍

1.Collection接口:是构造类集框架的基础。它声明所有类集都将拥有的核心方法。所有的类集实现Collection。

add:可以将对象加入到类集。这个方法带一个Object类型参数。因为Object是所有类的超累,所以任何类型的对象可以被存储在一个类型中。但是,不能直接存储类型int,char,double等(上篇博客提到的主数据类型)的值。如果要使用这些类型,则使用对象,比如new Integer(1);

iterator:该方法返回一个实现Iterator接口的对象,称作迭代器。用以方便的实现容器内元素的遍历操作。

Iterator it =collection.iterator();//得到一个迭代器

Boolean isExist =it.hasNext();//判断右边右边是否有元素。

object  obj = it.next();//返回右边右边的元素,并将游标移动到下一个位置

it.remove();//删除右边左边的元素。在执行完next之后该操作只能操作执行一次

 注意:容器类对象在调用remove、contains等方法时需要比较对象是否相等。这会涉及到对象类型的equals方法和hashcode方法。对于自定义的类型,需要重写equalshashcode方法以实现自定义的对象相等规则。相等的对象应该具有相等的hashcode

 

2.List接口:

           List是有序的Collection,使用此接口能精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素。List允许有相同的元素。

ArrayList类:

          实现了动态地增加和减少数组的元素,灵活设置数组的大小。每个ArrayList实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。

LinkedList类:

          是一种双向的链式结构。相对ArrayList而言,LinkedList的插入和删除元素相对方便,但速度较慢。

vector类:

          ArrayList和vector操作接口基本一致,区别在于内部的实现上。ArrayList采用异步处理的方式,相对于Vector的同步方式,速度比较快。但Vector是线程安全的。

 

ArrayList接口、LinkedList接口、Vector类对比:

 http://blog.csdn.net/xujiaolf/article/details/35227525

3.Set接口

          Set是一种不包含重复的元素的Collection。

HashSet:

          泛型类必须覆写来自Object类的hashCode(),equals(Objectobj)方法;将根据hashCode,equals判断是否重复从而不保存重复的元素;

TreeSet:

        前提,泛型类必须实现Comarable接口,元素是否重复根据compareTo方法定义的规则判断,重复的元素添加将失败!

示例链接:http://hi.baidu.com/amenmen/item/85a3bef304b3d415ce9f3236

 

4.Map接口

             Map没有继承Collection接口,在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。这就是我们平时说的键值对Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。

HashMap:

         它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为Null。非同步的。

TreeMap:

        能够把它保存的记录根据键(key)排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。

Hashtable:

         与HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。

总结:

HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。

 

示例:

Java:HashMap,TreeMap,Hashtable一些简单介绍;

http://hi.baidu.com/personnel/item/3a8081941271dbd91a49df29

Java中HashMap和TreeMap的区别深入理解:

http://www.jb51.net/article/32652.htm

 

参考:

java_Collection_介绍: http://blog.sina.com.cn/s/blog_3fb3625f0101aref.html

Java Collection: http://skyuck.iteye.com/blog/526358

 

发布了106 篇原创文章 · 获赞 78 · 访问量 29万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章