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

java集合框架、集合操作--线性表_第1张图片

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 subList(int fromIndex,int toIndex)方法:
获取子List
需要注意的是,subList获取的List与
原List占有相同的存储空间,对子List
的操作会影响原List。fromIndex和toIndex
是截取子List的首尾下标(前包括,后不包括)。


T[] toArray(T[] a)方法:
List转换为数组,可以传入一个指定类型
的数组,该数组的元素类型应与集合的元素
类型一致。返回值则是转换后的数组,该数组
会保存集合中所有的元素。
List的toArray方法用于将集合转换为数组。
但实际上该方法时在Collection中定义的,
所以所有的集合都具备这个功能。


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




Collections.sort方法实现排序
Collections是集合的工具类,它提供了
很多便于我们操作集合的方法,其中就有
用于集合排序的sort方法。


static void sort(List 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 若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)的原则。





























你可能感兴趣的:(java)