集合框架

来源:互联网 发布:plc编程线 编辑:程序博客网 时间:2024/05/16 05:25

一,集合
集合,也称为容器,它可以将一系列元素组合成一个单元,用于与存储,提取,管理数据。JDK提供的集合API都在java.util包内。Java集合的框架主要分在两大部分,一部分实现了Collection接口,该接口定义了存取一组对象的方法,其子接口Set和List分别定义了存取方式;另一部分是Map接口,该接口定义了存储一组“键(key)值(value)”映射对的方法。
接口的框架图:
这里写图片描述
从图中可以看出Collection接口和Map接口都继承自Iteratable接口,因为Iterable接口允许对象成为foreach语句的目标,所以所有集合类都可以成为JDK1.5的新特性,增强for循环的目标。
二,Collection接口
Collection接口主要的子接口是:序列元素有序的可重复的List接口和序列元素无序的不可重复的Map接口。
Collection接口定义的常用的方法有:
boolean add(E e) ,确保此 collection 包含指定的元素(可选操作)。
void clear() ,移除此 collection 中的所有元素(可选操作)。
boolean contains(Object o), 如果此 collection 包含指定的元素,则返回 true。
boolean isEmpty(), 如果此 collection 不包含元素,则返回 true。
Iterator iterator(), 返回在此 collection 的元素上进行迭代的迭代器。
boolean remove(Object o),从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
int size(),返回此 collection 中的元素数
三,List接口
特点:序列中的值属于有序化的可重复的。可以使用索引(下标)进行查询。
实现类:ArrayList,LinkedList,Vector,Stack。

ArrayList和LinkedList的区别:
ArrayList在存储方式上采用数组进行顺序存储,LinkedList在存储方式上采用链表进行链式存储。所以ArrayList在增加,删除元素上速度较慢,但是在查询的方式上速度较快。LinkedList在增减,删除元素上速度较快,但是在查询的方式上传速度较慢。
ArrayList和Vector的区别:
ArrayList属于非线程安全,Vector属于线程安全。同样LinedList也属于非线程安全。
Stack类:
Stack继承了Vector类,对应数据结构中的栈。以“先进后出”的方式来存储和操作数据。

ArrayList接口的常见方法:
boolean add(E e),将指定的元素添加到此列表的尾部。
void add(int index, E element),将指定的元素插入此列表中的指定位置。
void clear(),移除此列表中的所有元素。
boolean contains(Object o), 如果此列表中包含指定的元素,则返回 true。
E get(int index),返回此列表中指定位置上的元素。
int indexOf(Object o),返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。
boolean isEmpty() ,如果此列表中没有元素,则返回 true
int lastIndexOf(Object o),返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。
E remove(int index), 移除此列表中指定位置上的元素。
boolean remove(Object o),移除此列表中首次出现的指定元素(如果存在)。
E set(int index, E element),用指定的元素替代此列表中指定位置上的元素。
int size(), 返回此列表中的元素数。

LinkedList常用方法(在ArrayList的基础上新加的):
void addFirst(E e),将指定元素插入此列表的开头。
void addLast(E e),将指定元素添加到此列表的结尾。
E element() ,获取但不移除此列表的头(第一个元素)。
E getFirst(),返回此列表的第一个元素。
E getLast(), 返回此列表的最后一个元素。
int lastIndexOf(Object o),返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。
E pop(),从此列表所表示的堆栈处弹出一个元素。
void push(E e),将元素推入此列表所表示的堆栈。
遍历方式:
for,foreach,Iterator(迭代器)

三,Set接口
特点:集合中的元素为无序的不可重复的。
实现类:HashSet,TreeSet
HashSet常用的方法:
boolean add(E e),如果此 set 中尚未包含指定元素,则添加指定元素。
void clear(), 从此 set 中移除所有元素。
boolean contains(Object o),如果此 set 包含指定元素,则返回 true。
boolean isEmpty(),如果此 set 不包含任何元素,则返回 true。
Iterator iterator(),返回对此 set 中元素进行迭代的迭代器。
boolean remove(Object o),如果指定元素存在于此 set 中,则将其移除。
int size(),返回此 set 中的元素的数量(set 的容量)。
HashSet是通过equals方法以及hashcode方法来判断对象是否重复。HashSet类对象是否重复判断。通过重写equals方法实现。
TreeSet类在添加的元素的时候不是无序的,而是会进行升序排序的,默认是按照自然升序排列的。因为TreeSet类在实现Set接口的同时,也实现了SortedSet接口,所以TreeSet类是一个具有排序功能的类。
如果想定义自己的排序方式,方法也很简单,就是让加入TreeSet集合的对象所属类实现Comparable接口。而我们使用String,Intereger类等也会有排序的效果,是因为这些类已经实现了Comparable接口。该接口又被称为内部比较器,不言而喻就会有外部比较器。
外部比较器Comparator可以理解为一个专用的比较器,当集合中的对象不支持自比较或者比较的功能不能满足程序的需求时,可以写一个比较器来完成两个对象之间的比较。

四,Map接口
特点:key/value形式存储数据,key不可以重复,value可以重复。在添加key/value时如果发现有重复的,会覆盖之前已经存在的。
实现类:HashMap,TreeMap。
常用的方法:
void clear(),从此映射中移除所有映射关系。
boolean containsKey(Object key) , 如果此映射包含指定键的映射关系,则返回 true。
boolean containsValue(Object value),如果此映射将一个或多个键映射到指定值,则返回 true。
V get(Object key), 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
V remove(Object key),如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
int size(),返回此映射中的键-值映射关系数。
V put(K key, V value),在此映射中关联指定值与指定键。
Set entrySet(), 返回此映射所包含的映射关系的 Set 视图。
Set keySet(), 返回此映射中包含的键的 Set 视图。
Set valueSet(),返回次映射中包含的值的Set视图。
遍历方法:
Map没有iterator方法,要先将map变为set集合再进行遍历。

五,工具类
Collections工具类,是集合对象的工具类,提供了操作集合的工具方法,如排序、赋值、反转排序等方法。
Collections的常用静态方法:
static void sort(List list),根据元素的自然顺序 对指定列表按升序进行排序。
static void sort(List list, Comparator c),根据指定比较器产生的顺序对指定列表进行排序。
static void shuffle(List list),使用默认随机源对指定列表进行置换。
static void sort(List list),根据元素的自然顺序 对指定列表按升序进行排序。
static void sort(List list, Comparator c),根据指定比较器产生的顺序对指定列表进行排序。
static void swap(List list, int i, int j),在指定列表的指定位置处交换元素 。
Arrays工具类,适合用于操作数组。提供的方法都是静态的,主要有以下功能对数组进行排序,给数组赋值,比较数组中元素的值是否相同,进行二分查找。

原创粉丝点击