容器

本文深入解析Java集合框架,包括Collection、List、Set、Map接口及其实现类如ArrayList、LinkedList、HashSet的特点与应用。探讨了迭代器接口、泛型以及Comparable接口的作用,对比了不同容器的性能优劣。

本章的主要内容有:

220920_fjot_3299202.png

数组存在两个缺陷: 1. 数组的长度难以扩充 。  2. 数组中的元素类型必须相同。

容器可以弥补数组的两个缺陷,它是 Java API 所提供的一系列类的实例,用于在程序中存放对象。

需要记住下图:

     222414_JqxM_3299202.png

集合就是将若干用途,性质相同或者相近的“数据”组合而成的一个整体。

在数学上,集合可以归纳为三种类型:

      集(Set)

            Set集合中不区分元素的顺序,不允许出现重复的元素。

      列表(List)

            List集合区分元素的顺序,且允许包含重复的元素。

       映射(Map)

             映射中保存成对的“键-值” (Key-value)信息,映射中不能包含重复的键,每个键最多只能映射一              个值。

      223106_gIcC_3299202.png

Collection 接口中所定义的方法介绍 (只简单的列出来一些,其他的还需要看API文档)

     int size( )     返回此collection中的元素。

    boolean   isEmpty( );    判断是否为空。

    boolean  containesAll (Collection c);

                  判断形参c所指向的集合中所有的元素是不是已经全部包含(是否equals)在了当前的集合中。

    Object[ ]  toArray ( )

                   容器不是数组,不能通过下标的方式访问容器的元素。

                   只有数组才可以通过下标来访问。

                   返回一个包含此collection中所有元素的数组。

     boolean add(Object e) ;      把e添加到当前的集合中。

     boolean remove ( Object o);

     boolean  addAll (Collection c);    把c中的所有元素添加到当前的集合中。

     boolean  removeAll ( Collection c);

     void  clear( );   把当前容器中所有元素都清除。

      booean  equals (Object o);

      int hashCode( ); 

toString方法

      对于任意类A,假设aa是该类的一个实例

            System.out.println(aa);  等价于 System.out.println(aa.toString())

      Object类中含有toString()方法。

      Java中所有的默认类都继承了Object的toString()方法

       建议所有的子类都重写toString 方法。

equals()方法和hashCode()方法。

        一般来说  当某个对象放在Map接口中作为字典那个索引(key值)时需要重写hashcCode()方法

        重写equals() 方法,需要重写hashCode()方法  (也就是当这个类的对象,被当做键值【key值】时)

102948_nlqt_3299202.png

103045_fJlP_3299202.png

103108_XjZM_3299202.png

下边图片上的代码就是重写了equals()和hashCode(), 直接写return  true  或者

  return  false 效果是一样的。    注意关键字   instanceof

103129_qCCa_3299202.png

iterator接口

     iterator接口用来以统一的方式对集合中的各个元素进行遍历。

     iterator接口的对象称作迭代器,利用该对象可以方便的遍历容器中的元素。

     所有实现了Collection接口的容器类都有一个iterator() 方法,该方法返回一个实现 iterator接口对象。

   115501_tumh_3299202.png

  void remove()  删除最近返回的元素,在调用remove之前,我们至少保证先调用一次next方法(否则会抛出异常),而且调用next之后只能调用一次remove方法。

   Iterator对象的remove方法是在迭代过程中删除元素的唯一的安全方法。

补充: JDK1.5增强的for循环。

        增强的for循环对于遍历array或collection的时候非常简便。

114516_QOIC_3299202.png

         缺陷:

               数组:  对于数组来说不能方便的访问下标值。

               集合: 与使用Iterator相比,不能方便的删除集合中的内容。

                                     在内部也是调用的iterator.

         总结:除了简单遍历并读出其中的内容外,不建议使用增强for.

List接口: 

            List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的,而且可以重复。

            List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号取出容器中的元                     素;

             J2SDK所提供的List容器类有ArrayList, LinkedList等。

                   120504_dJ15_3299202.png

                   120520_0jzM_3299202.png

             121018_LkbM_3299202.png

 

            121034_1GBR_3299202.png

Set 接口 

          Set 接口是Collection 的子接口,Set接口没有提供额外的方法,但实现Set接口的容器类中的元素是没有顺序的,而且不可以重复。 

          Set容器类中有HashSet,TreeSet等。

          List接口中有add, set, indexOf 方法,但是Set接口中却只有add方法,没有set, indexOf方法,因为Set是无序不能重复的,不存在某元素具体位置这个概念。

         122101_LUzI_3299202.png

       122255_qpt0_3299202.png

  Map接口:           

        java.util.Map接口中描述了映射结构,Map结构允许以健集,值集合或键-值映射关系集的形式来查看某个映射的内容。

   122959_oOr3_3299202.png

   123154_fE8A_3299202.png

123209_jO1f_3299202.png

Collections类

            124124_xasF_3299202.png

124217_a9v1_3299202.png

124242_syX0_3299202.png

124303_G685_3299202.png

Comparable接口:

         基本类型数据和String类型数据,他们的比较方法Java已经提供;用户自定义类对象之间的比较标准需要用户自己定义。

           所以  如果一个容器中含有用户自定义类型的数据,并且我们需要对容器进行排序,或者查找某一个元素时,我们必须得制定容器中元素与元素之间比较的标准。

            凡是需要进行对象比较排序的场合均可考虑实现Comparable接口。

   144202_4jSH_3299202.png

144224_ofRP_3299202.png

144338_5ObM_3299202.png

144400_9Au8_3299202.png

144650_V81y_3299202.png

  如果我们经常在List的开始处增加元素,或者在List中进行插入和删除操作,我们应该使用LinkedList,否则的话,使用ArrayList将更加快速。    ArrayList存取速度快,插入速度慢; LinkedList存取速度慢,插入删除速度快。

145956_aHI0_3299202.png

150054_V8Iu_3299202.png

泛型

   就是在类后面加尖括号<>   ,   不用反复的进行数据类型转化。

095203_Dpy9_3299202.png

095644_AsE8_3299202.png

 

 

145911_8fca_3299202.png

Collection,   List,   Map ,  Set,    Iterator,  Comparable. 

    

   

 

 

 

 

转载于:https://my.oschina.net/u/3299202/blog/1475706

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值