Java笔记(二十二)……Collection集合
2013-10-22 13:11
218 查看
概述
为什么会出现集合类
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式数组和集合类同是容器,有何不同
数组虽然也可以存储对象,但是长度固定,集合长度可变数组中可以存储基本数据类型,集合只能存储对象
集合类的特点
集合类只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象集合框架
Collection接口中定义了集合框架的构成及分类集合类常用方法
Collection定义了集合框架的功能添加
boolean
add(E e)
boolean
addAll(Collection<? extends E> c)
删除
boolean
remove(Object o)
boolean
removeAll(Collection<?> c)
void
clear()
判断
boolean
contains(Object o)
boolean
isEmpty()
获取
Iterator<E>
iterator()
int
size()
取交集
boolean
retainAll(Collection<?> c)
集合变数组
Object[]
toArray()
<T> T[]
)]toArray(T[] a)
迭代器
迭代器其实就是集合的取出元素方式,因为迭代器需要对集合中的元素直接操作,并且依赖于集合,所以将迭代器定义成集合中的内部类,通过集合的iterator()方法来获取迭代器的对象List接口
元素是有序的,元素可以重复,因为该集合体系有索引List集合中的特有方法
增void
add(int index, E element)
boolean
addAll(int index, Collection<? extends E> c)删
E
remove(int index)改
E
set(int index, E element)查
E
get(int index)
List<E>
subList(int fromIndex, int toIndex)
int
indexOf(Object o)
ListIterator<E>
listIterator()List集合特有的迭代器ListIterator
在迭代时,不可以通过集合对象的方法操作集合中的元素,因为此时迭代器和集合对象在同时操作集合里的对象,这样容易出现安全隐患,util包中提供了ConcurrentModificationException异常来提示此错误,所以我们在使用迭代器遍历集合时,只能通过迭代器的remove方法删除元素,只此一种。
想要通过迭代器对集合中的元素进行更多的操作,List集合为我们提供了ListIterator,ListIterator是Iterator的子接口,该接口只能通过List集合的listIterator方法获取
ArrayList类
List接口的子类,底层的数据结构是数组结构特点:查询速度快,但是增删速度较慢,线程不同步
LinkedList类
List接口的子类,底层的数据结构是链表特点:增删速度很快,查询速度较慢,线程不同步
特有方法:
addFirst() addLast()
getFirst() getLast()
获取元素,但不删除元素,如果集合中没有元素,会出现NoSuchElementException
removeFirst() removeLast()
获取元素,并删除元素,如果集合中没有元素,会出现NoSucnElementException
JDK1.6以后出现了替代方法
offerFirst() offerLast()
peekFirst() peekLast()
获取元素,但不删除元素,如果集合中没有元素,返回null
pollFirst() pollLast()
获取元素,并删除元素,如果集合中没有元素,返回null
由以上方法可知,LinkedList可以用来构建队列或者堆栈结构
Vector类
List接口的子类,底层的数据结构是数组结构,线程同步由于效率比较低,后期被ArrayList取代
枚举Enumeration
枚举就是Vector特有的取出方式,与迭代器很相似
由于枚举的方法名称都过长,后期被迭代器取代
Set接口
元素是无序的,元素不可以重复,集合的功能与Collection接口一致HashSet类
Set接口的子类,底层的数据结构是哈希表,线程不同步HashSet如何保证元素唯一性
HashSet通过元素的两个方法hashCode和equals来完成唯一性的判断
如果元素hashCode值不同,则认为元素不同
如果元素hashCode值相同,则判断equals是否为true,若为false,则认为元素不同,否则元素相同,不会加入到集合中
TreeSet类
Set接口的子类,底层的数据结构是二叉树,线程不同步TreeSet元素排序方法
第一种方法:让元素自身具备比较性
元素需要实现Comparable接口,覆盖compareTo方法
这种方式也称为元素的自然顺序,或者叫做默认顺序
第二种方式:定义容器的比较性
当元素本身不具备比较性时,或者具备的比较性不是我们所需的
这时需要让容器自身具备比较性
定义了比较器,即实现Comparator接口,将比较器对象作为参数传递给TreeSet集合的构造函数
当两种比较方式都存在时,以比较器为主
泛型
JDK1.5之后出现的新特性,用于解决安全问题,是一个类型安全机制泛型好处
将运行时期出现的问题ClassCastException转移到了编译时期,方便于程序员解决问题,让运行时更安全避免了强制转换过程
泛型格式
通过<>来定义要操作的引用数据类型在使用java提供的对象时,什么时候写泛型呢
通常在集合框架中最常见只要见到类或者方法上有<>时,就要定义泛型
<>就是用来接收类型的,类型为引用数据类型
什么时候定义泛型类
当类中要操作的引用数据类型不确定的时候早期定义Object来完成扩展
现在用定义泛型来完成扩展
泛型类定义的泛型,在整个类中都有效
当不同方法操作的类型不同,且类型不确定时,可以将泛型定义在方法上
注意:
静态方法不可以访问类上定义的泛型
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上
泛型的限定
?通配符<? extends E>:可以接收E类型或者E的子类型,即设置上限
<? super E>:可以接收E类型或者E的父类型,即设置下限
相关文章推荐
- Java基础知识强化之集合框架笔记08:Collection集合自定义对象并遍历案例(使用迭代器)
- JAVA学习笔记——Collection集合总结
- Java基础知识强化之集合框架笔记11:Collection集合之迭代器的原理及源码解析
- java 集合学习笔记1-Collection 集合遍历 List子类特点
- 黑马程序员——Java学习笔记之11——“Collection集合”总结
- Java基础知识强化之集合框架笔记06:Collection集合存储自定义对象并遍历的案例
- JAVA学习笔记(二十二)- 集合HashMap与Hashtable
- [2014-08-08]JAVA笔记_Collection(集合)
- JAVA学习笔记——集合Collection
- (四)、Java复习笔记之Collection集合
- Java基础知识强化之集合框架笔记09:Collection集合迭代器使用的问题探讨
- Java学习笔记 --- Collection集合框架
- Java笔记(二十四)……集合工具类Collections&Arrays
- Java基础知识强化之集合框架笔记07:Collection集合的遍历之迭代器遍历
- Java基础知识强化之集合框架笔记12:Collection集合存储字符串并遍历
- 黑马程序员-java集合笔记之Collection
- 13. Java类集 Part 2(Map接口、SortedMap接口、集合工具类Collection、Stack类、属性类Properties) ----- 学习笔记
- Java基础知识强化之集合框架笔记13:Collection集合存储学生对象并遍历
- 【我的Java笔记】Collection集合的概述 & List
- 【慕课笔记】第六章 JAVA中的集合框架(下) 第5节 应用Collection.sort()实现List排序