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

来源:互联网 发布:淘宝运费险如何设置 编辑:程序博客网 时间:2024/06/05 19:46

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)的原则。





























原创粉丝点击