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)的原则。
相关文章推荐
- 编译原理:实验二、集合与线性表操作
- JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表
- 编译原理:实验二、集合与线性表操作
- SE01 Unit04 集合框架 、 集合操作 —— 线性表
- java集合框架工具类Collections,集合的操作
- Java核心API(5) —— 集合操作(线性表)
- 集合框架 、 集合操作 —— 线性表
- 假设利用两个线性表La和Lb分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的 集合A=AUB。这就要求对线性表作如下操作:扩大线性表La,将存在于线性表Lb中而不存在于线
- java集合框架之集合的迭代操作
- Sql Server实用操作小技巧集合(转)
- SQL Server实用操作小技巧集合
- 数据结构:线性表删除操作的php和js实现
- Sql Server实用操作小技巧集合
- Sql Server实用操作小技巧集合
- Sql Server实用操作小技巧集合
- 解决: 集合已修改,枚举操作可能不会执行问题
- 在ASP中用集合成批操作数据库 (转)
- ASP中遍历和操作Application对象的集合
- Sql Server实用操作小技巧集合
- SQL Server实用操作小技巧集合