Java的集合类主要由两个接口派生而出:Collection和 map;
![](https://img-blog.csdn.net/20170325150549552?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWVuZ2RvbmdodWkxMjM0NTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170325150622303?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWVuZ2RvbmdodWkxMjM0NTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Java集合大致可以分为4类:
Set:代表无序、不可重复的集合;
List:代表有序、重复的集合;
Map:代表具有映射关系的集合;
Queue:代表队列集合的集合;
![](https://img-blog.csdn.net/20170325150653584?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWVuZ2RvbmdodWkxMjM0NTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如图,如果访问List集合中的元素,可以直接根据元素的索引来访问;
如果访问map集合中的元素,可以根据每一项元素的Key来访问对应的Value;
如果访问set集合中的元素,只能根据元素本身来访问;
Collection接口的操作方法:
l boolean add(Object o)
向集合添加一个元素,成功返回true;
l boolean addAll(Collection<? extends E>c)
将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
l void clear()
移除此 collection 中的所有元素(可选操作)。
l boolean contains(Object o)
如果此 collection 包含指定的元素,则返回 true。
l boolean containsAll(Collection<?> c)
如果此 collection 包含指定 collection 中的所有元素,则返回 true。
l boolean equals(Objecto)
比较此 collection 与指定对象是否相等。
l int hashCode()
返回此 collection 的哈希码值。
l boolean isEmpty()
如果此 collection 不包含元素,则返回 true。
l Iterator<E> iterator()
返回在此 collection 的元素上进行迭代的迭代器。
l boolean remove(Objecto)
从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
l boolean removeAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
l boolean retainAll(Collection<?> c)
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
l int size()
返回此 collection 中的元素数。
l Object[] toArray()
返回包含此 collection 中所有元素的数组。
l toArray(T[] a)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
新增方法:
Java 8 为Collection 集合新增removeIf (Predicate filter)方法:批量删除集合中符合filter条件的元素;
//创建集合
Collection books = new HashSet();
Books.add(new String (“***************”));
Books.add(new String (“***************”));
Books.add(new String (“***************”));
//使用lamba表达式进行过滤集合
Books.removeIf(ele ->((String)ele).length() < 10);
Iterator
Iterator接口是java集合框架的成员,与Collection和map不同的是,iterator主要用于遍历Collection中的元素,而非作为容器去装在集合;
并且Iterator接口是Collection接口的父接口。Collection集合可以直接调用迭代器的方法;
Iterator 仅用于遍历,使用之前需要依赖一个迭代的集合,所以iterator必须依附于一个Collection对象。
![](https://img-blog.csdn.net/20170325150741631?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWVuZ2RvbmdodWkxMjM0NTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
//实例化
Collection books = new ArrayList();
//父类应用指向子类,books的集合
Iterator it = books.iterator();
//调用迭代器的方法
It.hasNext();
Iterator的方法有:
l Boolean hasNest();如果被迭代的集合元素还灭有被遍历完,则返回TRUE;
l Object next();返回集合下一个元素;
l Void remove(); 删除集合里上一次next 方法返回的元素;
l Void forEachRemaining (Consumer action );可以使用lamba表达式遍历集合元素;
Set集合
Set集合继承自Collection ,拥有Collection的方法,而且使用方法基本相同;不同点在于set集合不能添加重复的元素(hashSet /treeSet/enumSet);
HashSet是Set接口的典型实现类。它按照Hash算法来存储集合中的元素。
1. 有顺序,但是顺序可能发生变化;
2. HashSet非线程同步,同一时间多个线程访问一个hashset,需要通过代码保证hashset的同步;
3. 集合元素的值可以是null;
Set集合具有hashCode()和equals()两个方法;存储元素时,Set集合会根据hashcode()方法决定该元素的存储位置;equals()方法会对元素的value进行判断识别;在Set集合中,只有两个元素的hashcode()和equals()方法分别返回相同的结果时,才表明两个元素时相同的(在Set集合中)。如果元素的hashcode()或者equals()方法返回的结果有异,则表明两个个元素不同;
Hash算法相比与数组的优点是:数组元素的索引是连续的,并且数组的长度是固定的,无法自由增加数据的长度。但是运用hash算法就不同了,hash算法采用了hashCode来计算存储位置,并且可以自由增加存储长度。而且元素查询时是根据返回的hashcode存取的,相对数组,速度比较快;
LinkedHashSet
LinkedHashSet同属Set集合,它使用hashcode()进行元素存储位置的决定,但是不同于hashSet,LinkedHashSet使用链表结构维护元素的顺序,结果就是,当遍历该集合元素时,LinkHashSet会按照元素的添加顺序来访问集合中的元素;
TreeSet
TreeSet是SortedSet的实现类,它的元素都是出于排序状态;TreeSet提供了访问次序函数和截取子集的方法;
l Comparator comparator()
l Object first();
l Object last();
l Object lower(object c);
l Object higher(object e);
l SortedSet subset(Object fromElement,Object toElement);
l SortedSet headset(Object toElement)
l SortedSet tailSet(Object fromElement)
总体来讲,HashSet比TreeSet的性能要好一些,表现在添加、查询领域方面;TreeSet的特点在于它的有序;
Set的三个实现类hashSet treeSet EnumSet 都是线程不安全的,在多个线程访问同一个Set时,需要手动保证该Set集合的同步性。
List集合
List接口的父接口是Collection接口,拥有Collection方法的所有方法,且List是有序且可以重复的集合;
l Void add(int index,Object element); 将元素插入index位置;
l Boolean addAll(int index ,Collection c);将集合全部插入index位置;
l Object get(int index); 返回集合index位置的元素;
l Int indexOf(Object o); 返回o在集合中第一次出现的位置;
l Object remove(int index); 返回o在集合中最后一次出现的位置;
l Object set (int index ,Object element); 将index位置的元素替换成element;
l List subList(int fromIndex,int toIndex); 返回从fromindex -1 到 toindex 之间的所有元素;
l Void sort(Comparator c ) ; 集合根据Comparator参数对List 进行某种排序;
Java的集合类主要由两个接口派生而出:Collection和 map;
Java集合大致可以分为4类:
Set:代表无序、不可重复的集合;
List:代表有序、重复的集合;
Map:代表具有映射关系的集合;
Queue:代表队列集合的集合;
如图,如果访问List集合中的元素,可以直接根据元素的索引来访问;
如果访问map集合中的元素,可以根据每一项元素的Key来访问对应的Value;
如果访问set集合中的元素,只能根据元素本身来访问;
Collection接口的操作方法:
l boolean add(Object o)
向集合添加一个元素,成功返回true;
l boolean addAll(Collection<? extends E>c)
将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
l void clear()
移除此 collection 中的所有元素(可选操作)。
l boolean contains(Object o)
如果此 collection 包含指定的元素,则返回 true。
l boolean containsAll(Collection<?> c)
如果此 collection 包含指定 collection 中的所有元素,则返回 true。
l boolean equals(Objecto)
比较此 collection 与指定对象是否相等。
l int hashCode()
返回此 collection 的哈希码值。
l boolean isEmpty()
如果此 collection 不包含元素,则返回 true。
l Iterator<E> iterator()
返回在此 collection 的元素上进行迭代的迭代器。
l boolean remove(Objecto)
从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
l boolean removeAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
l boolean retainAll(Collection<?> c)
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
l int size()
返回此 collection 中的元素数。
l Object[] toArray()
返回包含此 collection 中所有元素的数组。
l toArray(T[] a)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
新增方法:
Java 8 为Collection 集合新增removeIf (Predicate filter)方法:批量删除集合中符合filter条件的元素;
//创建集合
Collection books = new HashSet();
Books.add(new String (“***************”));
Books.add(new String (“***************”));
Books.add(new String (“***************”));
//使用lamba表达式进行过滤集合
Books.removeIf(ele ->((String)ele).length() < 10);
Iterator
Iterator接口是java集合框架的成员,与Collection和map不同的是,iterator主要用于遍历Collection中的元素,而非作为容器去装在集合;
并且Iterator接口是Collection接口的父接口。Collection集合可以直接调用迭代器的方法;
Iterator 仅用于遍历,使用之前需要依赖一个迭代的集合,所以iterator必须依附于一个Collection对象。
//实例化
Collection books = new ArrayList();
//父类应用指向子类,books的集合
Iterator it = books.iterator();
//调用迭代器的方法
It.hasNext();
Iterator的方法有:
l Boolean hasNest();如果被迭代的集合元素还灭有被遍历完,则返回TRUE;
l Object next();返回集合下一个元素;
l Void remove(); 删除集合里上一次next 方法返回的元素;
l Void forEachRemaining (Consumer action );可以使用lamba表达式遍历集合元素;
Set集合
Set集合继承自Collection ,拥有Collection的方法,而且使用方法基本相同;不同点在于set集合不能添加重复的元素(hashSet /treeSet/enumSet);
HashSet是Set接口的典型实现类。它按照Hash算法来存储集合中的元素。
1. 有顺序,但是顺序可能发生变化;
2. HashSet非线程同步,同一时间多个线程访问一个hashset,需要通过代码保证hashset的同步;
3. 集合元素的值可以是null;
Set集合具有hashCode()和equals()两个方法;存储元素时,Set集合会根据hashcode()方法决定该元素的存储位置;equals()方法会对元素的value进行判断识别;在Set集合中,只有两个元素的hashcode()和equals()方法分别返回相同的结果时,才表明两个元素时相同的(在Set集合中)。如果元素的hashcode()或者equals()方法返回的结果有异,则表明两个个元素不同;
Hash算法相比与数组的优点是:数组元素的索引是连续的,并且数组的长度是固定的,无法自由增加数据的长度。但是运用hash算法就不同了,hash算法采用了hashCode来计算存储位置,并且可以自由增加存储长度。而且元素查询时是根据返回的hashcode存取的,相对数组,速度比较快;
LinkedHashSet
LinkedHashSet同属Set集合,它使用hashcode()进行元素存储位置的决定,但是不同于hashSet,LinkedHashSet使用链表结构维护元素的顺序,结果就是,当遍历该集合元素时,LinkHashSet会按照元素的添加顺序来访问集合中的元素;
TreeSet
TreeSet是SortedSet的实现类,它的元素都是出于排序状态;TreeSet提供了访问次序函数和截取子集的方法;
l Comparator comparator()
l Object first();
l Object last();
l Object lower(object c);
l Object higher(object e);
l SortedSet subset(Object fromElement,Object toElement);
l SortedSet headset(Object toElement)
l SortedSet tailSet(Object fromElement)
总体来讲,HashSet比TreeSet的性能要好一些,表现在添加、查询领域方面;TreeSet的特点在于它的有序;
Set的三个实现类hashSet treeSet EnumSet 都是线程不安全的,在多个线程访问同一个Set时,需要手动保证该Set集合的同步性。
List集合
List接口的父接口是Collection接口,拥有Collection方法的所有方法,且List是有序且可以重复的集合;
l Void add(int index,Object element); 将元素插入index位置;
l Boolean addAll(int index ,Collection c);将集合全部插入index位置;
l Object get(int index); 返回集合index位置的元素;
l Int indexOf(Object o); 返回o在集合中第一次出现的位置;
l Object remove(int index); 返回o在集合中最后一次出现的位置;
l Object set (int index ,Object element); 将index位置的元素替换成element;
l List subList(int fromIndex,int toIndex); 返回从fromindex -1 到 toindex 之间的所有元素;
l Void sort(Comparator c ) ; 集合根据Comparator参数对List 进行某种排序;