Java api 03第二部分

    1. 泛型机制:
  • 泛型是Java SE 5.0引入的特性,泛型的本质是参数化类型。在类、接口和方法的定义过程中,所操作的数据类型被传入的参数指定。

 

 

    1. Iterator迭代器
  • 迭代器用于遍历集合元素。获取迭代器可以使用Collection定义的方法: iterator()
  •  
  • 迭代器Iterator是一个接口,集合在重写Collection的iterator()方法时利用内部类提供了迭代器的实现。

 

遍历方式:

            hasNext()

 

            next()

 

            remove()

在使用迭代器遍历集合时,不能通过集合的remove方法删除集合元素,否则会抛出并发更改异常。我们可以通过迭代器自身提供的remove()方法来删除通过next()迭代出的元素。

 

 

 

forEach循环:增强for循环

Java5.0之后推出了一个新的特性,增强for循环,也称为新循环。该循环不通用于传统循环的工作,其只用于遍历集合或数组。

  •  在编译过程中,编译器会将新循环转换为迭代器模式。所以新循环本质上是迭代器。

 

        

 

 

  1. 集合操作  -线性表
    1. List
  • List接口是Collection的子接口,用于定义线性表数据结构。可以将List理解为存放对象的数组,只不过其元素个数可以动态的增加或减少。
  • List接口的两个常见实现类为ArrayList和LinkedList,分别用动态数组和链表的方式实现了List接口。
  • 可以认为ArrayList和LinkedList的方法在逻辑上完全一样,只是在性能上有一定的差别。ArrayList更适合于随机访问而LinkedList更适合于插入和删除。在性能要求不是特别苛刻的情形下可以忽略这个差别。

 

 

ArrayList和LinkedList

两者的数据结构

 

 

get和set:

get(int index):获取集合中指定下标对应的元素,下标从0开始。

set(int index, E elment):将给定的元素存入给定位置,并将原位置的元素返回。

 

 

插入和删除:

void add(int index,E element):

         将给定的元素插入到指定位置,原位置及后续元素都顺序向后移动。

 

remove(int index):

         删除给定位置的元素,并将被删除的元素返回。

 

 

List转换为数组:

  • List的toArray方法用于将集合转换为数组。但实际上该方法是在Collection中定义的,所以所有的集合都具备这个功能。
  • 其有两个方法:

           Object[] toArray()

           <T>T[] toArray(T[] a)

其中第二个方法是比较常用的,我们可以传入一个指定类型的数组,该数组的元素类型应与集合的元素类型一致。返回值则是转换后的数组,该数组会保存集合中所有的元素。

 

数组转换为List:

  • Arrays类中提供了一个静态方法asList,使用该方法我们可以将一个数组转换为对应的List集合。
  • 并且要注意的是,返回的集合我们不能对其增删元素,否则会抛出异常。并且对集合的元素进行修改会影响数组对应的元素。
  •  

 

 

    1. List排序
  • Collections是集合的工具类,它提供了很多便于我们操作集合的方法,其中就有用于集合排序的sort方法。
  • 该方法定义为: void sort(List<T> list)

           该方法的作用是对给定的集合元素进行自然排序。

 

 

Comparable:

  • Collections的sort方法是对集合元素进行自然排序,那么两个元素对象之间就一定要有大小之分。这个大小之分是如何界定的?实际上,在使用Collections的sort排序的集合元素都必须是Comparable接口的实现类,该接口表示其子类是可比较的,因为实现该接口必须重写抽象方法:
    • int compareTo(T t);

     该方法用于使当前对象与给定对象进行比较。

    • 若当前对象大于给定对象,那么返回值应为>0的整数。
    • 若小于给定对象,那么返回值应为<0的整数。
    • 若两个对象相等,则应返回0

 

 

案例:

     一个集合中存放的是学生对象,现对集合进行排序,排序规则按照学生的年龄排序

 

 

 

Comparator:

  • 一旦Java类实现了Comparable接口,其比较逻辑就已经确定;如果希望在排序的操作中临时指定比较规则,可以采用Comparator接口回调的方式。
  • Comparator接口要求实现类必须重写其定义的方法:int compare(T o1,T o2)

 

 

    1. 队列和栈

LinkedList,此类实现了Deque接口,Deque接口又继承了Queue

   Queue:

         java.util.Queue

          * 队列,可以存储一组元素,但是存取元素必须

          * 遵循先进先出原则(FIFO,First Input First Output)

          

         队列(Queue)是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式:

         只能从线性表的一端添加(offer)元素,从另一端取出(poll)元素。

         队列遵循先进先出(FIFO First Input First Output )的原则。

         JDK中提供了Queue接口,同时使得LinkedList实现了该接口

(选择LinkedList实现Queue的原因在于Queue经常要进行添加和删除的操作,而LinkedList在这方面效率较高)。

 

 

 

        

         方法:

               Offer(E e):将一个对象添加至队尾,如果添加成功则返回true。

               poll(): 从队首删除并返回一个元素。

               peek():返回队首的元素(但并不删除)。

 

 

Deque:

  • Deque是Queue的子接口,定义了所谓“双端队列”即从队列的两端分别可以入队(offer)和出队(poll),LinkedList实现了该接口。

方法:

           Offer(E e)

           offerFirst(E e)

           offerLast(E e)

           poll()

           pollFirst()

                      pollLast()

 

 

 

 

  • 如果将Deque限制为只能从一端入队和出队,则可实现“栈”(Stack)的数据结构,对于栈而言,入栈称之为push,出栈称之为pop。
  • 栈遵循先进后出(FILO First Input Last Output )的原则。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值