您的位置:首页 > 编程语言 > Java开发

java集合框架、集合操作--线性表

2017-06-26 21:51 134 查看


2017年6月26日学习总结:

集合操作
boolean remove(E e)方法:

将给定元素从集合删除,若成功删除则返回true。

将给定元素与集合中现有元素

顺序进行equals比较,然后删除与给定

元素equals比较为reue的。若有多个仅删除一个。

boolean addAll(Collection c)方法:

将给定集合中的所有元素添加到当前集合中,

添加后当前集合元素发生变化则返回teue

boolean removeAll(Collection c)

删除当前集合中与给定集合的共有元素

Iterator iterator()

获取迭代器。迭代器用于遍历元素。

迭代器Iterator是一个接口,集合在

重写Collection的itetator()方法时

利用内部类提供了迭代器的实现。

Iterator提供了统一的遍历集合元素的

方式,其提供了用于遍历集合的两个方法:

boolean hasNext()方法:

判断集合是否还有元素可以遍历。

E next()方法:

返回迭代的下一个元素

void remove()方法:

删除通过next()迭代出的元素。

需要注意的是,在调用remove方法前必须

通过迭代器的next()方法迭代过元素,

那么删除的就是这个元素。并且不能再次

调用remove方法,除非再次调用next()

后方可再次调用。

增强for循环

又称为:新循环,for each

自java1.5之后推出的一个新的特性,作用

是遍历集合或数组。所以新循环不取代

传统for循环的工作。

语法:

     for(元素类型 e:集合或数组){
 循环体;

     }

新循环并非新的语法,而是在编译过程中,

编译器会将新循环转换为迭代器模式。所以

新循环本质上是迭代器。

泛型机制

泛型在集合中的应用

泛型是java1.5之后引入的特性,泛型的

本质是参数化类型。在类、接口和方法的

定义过程中,所操作的数据类型被传入的

参数指定。java泛型机制广泛的应用在

集合框架中。所有的集合类型都带有泛型

参数,这样在创建集合时可以指定放入

集合中元素的类型。java编译器可以据此

进行类型检查,这样可以减少代码在运行

时出现错误的可能性。

集合操作--线性表

List

ArrayList和LinkedList

List接口是Collection的子接口,用于

定义线性表数据结构。可以将List理解

为存放对象的数组,只不过其元素个数

可以动态的增加或减少。

List接口的两个常见实现类为ArrayList

和LinkedList,分别用动态数组和链表的

方式实现了List接口。

可以认为ArrayList和LinkedList的方法

在逻辑上完全一样只是在性能上有一定的

差别。ArrayList更适合于随机访问而

LinkedList更适合于插入和删除。在性能

要求不是特别苛刻的情形下可以忽略这个差别。

List除了继承Collection定义的方法外,

还根据其线性表的数据结构定义了一系列

方法。

E get(int index)方法:

获取集合中指定下标对应的元素,下标从0开始。

E set(int index,E element)方法:

将给定的元素存入给定位置,并将原位置

的元素返回。

void add(int index,E element)方法:

将给定的元素插入到指定位置,原位置及

后续元素都顺序向后移动。

E remove(int index)方法:

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

List<E> subList(int fromIndex,int toIndex)方法:

获取子List

需要注意的是,subList获取的List与

原List占有相同的存储空间,对子List

的操作会影响原List。fromIndex和toIndex

是截取子List的首尾下标(前包括,后不包括)。

<T>T[] toArray(T[] a)方法:

List转换为数组,可以传入一个指定类型

的数组,该数组的元素类型应与集合的元素

类型一致。返回值则是转换后的数组,该数组

会保存集合中所有的元素。

List的toArray方法用于将集合转换为数组。

但实际上该方法时在Collection中定义的,

所以所有的集合都具备这个功能。

数组转换为List

Arrays类中提供了一个静态方法asList,

使用该方法可以将一个数组转换为对应的

List集合。
static <T>List,<T> asList<T...a>

返回的List的集合元素类型由传入的数组

的元素类型决定。返回的集合我们不能对其

增删元素,否则会抛出异常。并且对集合的

元素进行修改会影响数组对应的元素。

Collections.sort方法实现排序

Collections是集合的工具类,它提供了

很多便于我们操作集合的方法,其中就有

用于集合排序的sort方法。

static void sort(List<T> list)

Collections的sort方法是对集合元素进行

自然排序,那么两个元素对象之间就一定要

有大小之分。这个大小之分是如何界定的?

实际上,在使用Collections的sort排序的

集合元素都必须是Comparable接口的实现类,

该接口表示其子类是可比较的,因为实现该

接口必须重新抽象方法:

int compareTo(T t)

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

若当前对象大于给定对象,那么返回值应为>0的整数。

若小于给定对象,那么返回值应为<0的整数。

若两个对象相等,则应返回0.

一旦java类实现了Comparable接口,其比

较逻辑就已经确定;如果希望在排序的操作中

临时指定比较规则,可以采用Comparator

接口回调的方式。

Comparator接口要求实现类必须重写其定义的方法:

int compare(T o1,T o2)

该方法的返回值要求:

若o1>o2则返回值应>0

若o1<o2则返回值应<0

若o1==o2则返回值应为0

Queue

队列(Queue)是常用的数据结构,可以将

队列看错特殊的线性表,队列限制了对线

性表的访问方式:只能从线性表的一端添加

(offer)元素,从另一端取出(poll)元素。

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

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

实现了该接口(选择LinkedList实现Queue的原因在于

Queue经常要进行添加和删除的操作,而LinkedList

在这方面效率较高)。

boolean offer(E e)方法:

将一个对象添加至队尾,如果添加成功则返回true。

E poll()方法:

从队首删除并返回一个元素。

E peek()方法:

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

Deque是Queue的子接口,定义了所谓“双端队列”

即从队列的两端分别可以入队(offer)和出队(poll),

LinkedList实现了该接口。

如果将Deque限制为只能从一端入队和出队,则可实现

“栈”(Stack)的数据结构,对应栈而言,

入栈称之为push,出栈称之为pop。

栈遵循先进先出(FILO First Input Last Output)的原则。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息