一、Java集合框架简介及其关系图
Java集合框架的作用:为了方便高效操作对象,将对象放入容器中,统一管理。数组也是一种简单的容器,集合框架的容器是比较复杂的容器。
其中包含的具体的集合类,对于特定类型的操作具有不同的效率,选择那个容器类型,要根据具体的操作选择。
注意:位于java.util包里面的接口类几乎都是非线程安全的,线程安全的集合位于java.util.concurrent包里面。
Java集合框架中类的组织方式:总接口-->子接口-->抽象类-->具体集合类。在接口中定义行为,在具体的集合类中定义具体操作的实现。
Java集合框架中常用的接口和具体的集合类:Collection接口----Set接口----List接口,Map接口;常用的具体类:ArrayList LinkedList
TreeSet HashSet LinkedHashSet TreeMap HashMap HashTable LinkedHashMap;以及用于遍历集合元素的接口Iterator;用于定义比较
的接口:Comparator和Comparable;以及便利的工具类:Collections和Arrays。
二、Java集合框架中常用接口介绍
1.Collecttion接口:定义了除了Map相关的集合的共性操作:另外其继承了Iterable接口,继承其方法:iterator()--Iterator<T>
Collection接口常用方法:
a. boolean add(E e):向集合中添加元素 boolean addAll(Collection<? extends E> c):向该集合中添加另一个集合中的所有元素
b. void clear():清除该集合中的所有元素
c. boolean contains(Object o):判断集合中是否包含指定对象 boolean containsAll(Collecttion<?> c):判断集合中是否包含另一个集合
d. boolean equals(Object o):判断集合是否与指定集合相等 int hashCode():返回该集合的哈希值
e. boolean isEmpty():判断集合是否为空 int size():返回集合中的元素个数
f. Iterator <T> iterator():返回在该集合中元素进行迭代的迭代器
g.boolean remove(Object o):删除集合中指定的元素 boolean removeAll(Collection<?> c):删除该集合中和指定集合相同的元素
h. boolean retainAll(Collection<?>):保留该集合和指定集合中相同的元素
i. Object[] toArray():返回包含该集合所有元素的数组 T[] toArray(T[] t):将集合元素放入指定类型的数组,并返回该数组
注意:判断包含是根据对象的内容判断的
1 //必须先调用next()在调用remove();因为指针在元素前面,删除的是指针位置前面的一个元素 2 Iterator<String> it = c.iterator();//迭代集合中的元素 3 while(it.hasNext()){ 4 it.next(); 5 it.remove(); 6 }
2.Iterator接口:定义迭代集合中元素的方法
a. boolean hasNext():判断集合中是否还有元素
b. E next():返回集合中的下一个元素
c. boolean remove():删除迭代器上一个迭代的元素
3.List接口:继承Collection接口序列,元素之间按照加入集合的次序存在先后的次序关系,操作类似于数组,但是长度可变
允许添加相同内容的元素List中的方法增加了许多利用下标进行操作的方法
a. boolean add(int index, E e):在指定的位置添加元素 boolean containsAll(int index, Collecttion<?> c):在指定的位置加入某集合的元素
b. int indexOf(Object o):返回指定对象在序列中的下标 E get(int index):返回指定下标的元素 void set(int index, E e):设置指定的位置元素
c.ListIterator listIterator():返回一个序列迭代器,序列迭代器运行在迭代的时候,进行添加元素,设置元素,同时运行向前向后遍历序列
d.List<E> subList(int fromIndex, int toIndex):返回该序列的子序列--包含开始,不包含接收下标
3.Set接口:继承Collection其含义类似数学的集合,集合中不允许存在相同的元素,打印集合的时候是按照随机的顺序打印。未定义新的方法。
4.Map接口:存储的是一组键值对,Key-Value,注意key的内容不允许相同,每个Key只允许映射一个Value。Map常见的方法
a. V put(K key, V value):将一组键值对存入Map里边,并返回原来该键对应的值
b. Collection<V> values():将该映射关系所有的值放入集合并返回
c. Set<K> keySet():将此映射关系的所有的值放入一个集合并返回
d. Set<Map.Entry<k,v>> entrySet():返回包含该映射关系的集合
e. boolean containsKey(Object key)/containsValue(Object value):判断包含特定键或值
三、集合框架中常用类的介绍
1.ArrayList:是List接口的一种具体的实现,底层是用数组实现的,它和数组的最大的不同就是,数组的长度,会根据需要扩展,在将原来
数组的内容复制到拥有较大容量的新数组里面,通过这种方式实现动态数组概念。数组的复制是通过System.arrayCopy()实现的,该方法调用
的是本地方法。默认是10,每次扩大先按照1.5倍扩展。ArrayList的特点其实和数组类似,支持随机访问,对于数据量大且要频繁进行添加和
删除的操作,需要进行频繁的数据移动。ArrayList在实现迭代的时候定义一个内部类实现Iterator接口,以及另一个更方便的迭代的具体类
内部类,是通过继承Iterator接口的具体类,并实现ListIterator接口。
2.LinkedList:是List接口的另一种实现,其底层是用双链表实现的,链表的特点:对于插入和删除操作很方便只需要修改几个指针的指向
对于查找的效率不是特别好。LinkedList的常用方法:主要特殊操作方式是针对头和尾巴的操作。其实现了List接口、Dequue接口、Queue接口。
add(E e ) addFirst/Last() 以及针对下标的操作类似于ArrayList,getFirst/Last() removeFirst/Last() descendingIterator()--逆序迭代。
3.HashSet:是Set接口的一种实现,其底层实现是链表数组实现的,根据对象的哈希值进行划分。
4.TreeSet:是Set接口的一种实现,底层实现是用的红黑树,其最大的特点可以针对元素进行排序之类的操作。
5.HashMap和TreeMap:散列映射对键进行散列,树映射利用键的整体顺序对元素进行排序,包含许多针对次序相关的操作。