java集合

来源:互联网 发布:爱奇艺自制网络剧破案 编辑:程序博客网 时间:2024/06/02 05:40

java集合类主要由两个接口派生出:Collection和Map,Collection和Map是java集合框架的接口,这两个接口又包含了一些子接口或现实类。

一:Collection和Iteration接口

Collection接口是List,Set,Queue接口的父接口,该接口里定义的方法既可用于操作Set集合,也可用于操作List和Queue集合。
1.boolean add(Object obj):向集合里添加一个元素。如果集合对象被添加操作改变了,则返回true
2.boolean addAll(Collection):把集合c里的所有元素添加到指定集合里。如果集合对象被添加操作改变了,则返回true
3.void clear():清除集合里的所有元素,将集合长度变为0。
4.boolean contains(Object o):返回集合里是否包含指定元素。
5.boolean containsAll(Collection c)::返回集合里是否包集合c里的所有元素。
6.boolean isEmpty():返回集合是否为空。当集合长度为0是返回true,否则返回false。
7.Iterator iterator():返回一个Iterator对象,用于遍历集合的元素。
8.boolean remove(Object o):删除集合中的指定元素o,当集合包含一个或多个元素o是,该方法只删除第一个符合条件的元素,返回true。
9.boolean removeAll(Collection c)从集合中删除集合c里包含的元素(相当于调用该方法的集合减集合c),如果删除了一个或一个以上的元素,则返回true
10.boolean retainAll(Collection c)从集合中删除集合c里不包含的元素(相当于调用该方法的集合和集合c的交集)如果该操作改变了调用该方法的集合,则返回true
11.int size():返回集合里元素的个数
12.Object[]toArray():把集合转化成一个数组,所有集合的元素变成对应数组的元素。

二:Iterator接口

Iterator接口也是java集合框架的成员。Iterator用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。

1.boolean hasNext():如果被迭代的集合元素还没有被遍历完,则返回true。
2.Object nect():返回集合里的下一个元素。
3.void remove():删除集合里上一次next方法返回的元素。
4.void forEachRemaining(Consumer action):使用Lambda表达式来遍历集合。

三:Stream操作集合

独立使用Stream的步骤:
1.使用Stream或XxxStream的builder()类方法创建该Stream对应的Builder。
2.重复调用Builder的add()方法向该流中添加多个元素。
3.调用Builder的build()方法获取对应的Stream。
4.调用Stream的聚集方法。
Stream常用中间方法:
1.filter(Predicate predicate):过滤Stream中所有不符合predicate的元素
2.mapToXxx(ToXxxFunction mapper):使用ToXxxFunction对流中的元素执行一对一的转换,该方法返回的新流中包含了ToXxxFunction转换生成的所有元素。
3.peek(Consumer action):依次对每个元素执行一些操作,该方法返回的流与原有流包含相同的元素。该方法主要用于调试。
4.distinct():该方法用于排序流中所有重复的元素(判断元素重复的标准是使用equals()比较返回true)。这是一个有状态的方法。
5.sorted():该方法用于保证流中的元素在后续的访问状态中处于有序状态。这是一个有状态的方法。
6.limit(long maxSize):该方法用于保证对该流的后续访问中最大允许访问的元素个数。这是一个有状态的,短路方法。
Stream常用末端方法:
1..forEach(Consumer action):遍历流中所有元素,对每个元素执行action。
2.toArray():将流中所有元素转换成一个数组
3.reduce():该方法有三个重载的版本,都用于通过某种操作来合并流中的元素。
4.min():返回流中所有元素的最小值
5.max():返回流中所有元素的最大值
6.count():返回流中所有元素的数量
7.anyMatch(Predicate predicate):判断流中是否至少保包含一个元素符合Predicate条件
8.allMatch(Predicate predicate):判断流中是否每个元素都符合Predicate条件
9.noneMatch(Predicate predicate):判断流中是否每个元素都不符合Predicate条件
10.findFirst():返回流中的第一个元素
11.findAny():返回流中的任意一个元素

四:Set集合

Set集合不允许包含相同元素,如果试图把两个相同每个元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入。
HashSet类:
HashSet是Set接口的典型实现,大多数时候使用Set集合时就是使用这个现实类。HashSet按Hash算法来存储集合的元素。
HashSet特点:
1.不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也可能发生变化。
2.HashSet不是同步的,如果多个线程访问一个HashSet,假设有两个或者两个以上线程同时修改了HashSet集合时,则必须通过代码来保证其同步。
3.集合元素值可以是null。
TreeSet类:
TreeSet是SortedSet接口的实现类,正如SortedSet名字所暗示的,TreeSet可以确保集合元素出于排序状态。
TreeSet方法:
1.Compararor compararor():如果TreeSet采用了定制排序,则该方法返回定制排序所使用的Compararor;如果TreeSet采用了自然排序,则返回null。
2.Object first():返回集合中的第一个元素
3.Object last():返回集合中的最后一个元素
4.Object lower(Object e):返回集合中位于指定元素之前的元素(即小于指定元素的最大元素,参考元素不需要Treeset集合里的元素)
5.Object higher(Object e):返回集合中位于指定元素之后的元素(即大于指定元素的最小元素,参考元素不需要Treeset集合里的元素)
6.SortedSet sub(Object fromElement,Object toElement):返回此Set子集合,范围从 fromElement(包含),到 toElement(不包含)。
7.SortedSet headSet(Object toElement):返回此Set子集,有小于toElement的元素组成
8.SortedSet tailSet(Object fromElement):返回此Set子集,有大于或等于fromElement的元素组成
自然排序:
TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合的元素按1升序排列,这种方法就是自然排序。
定向排序:
如果需要实现定制排序,例如以降序排列,则可以通过Comparator接口帮助。
EnumSet类:
EnumSet是一个专门为枚举类设计的集合类,Enumset中的所有元素都必须是指定枚举类型的枚举值,该枚举值在创建EnumSet时显示或隐式的指定。EnumSet的集合元素也是有序的,EnumSet以枚举值在Enum类内的定义顺序来决定集合元素的顺序。
1.EnumSet allOf(Class elementType):创建一个包含指定枚举类里所有枚举值的EnumSet集合
2.EnumSet complementOf(EnumSet s):创建一个其元素类型与指定EnumSet里元素类型相同的EnumSet集合,新EnumSet集合包含原EnumSet集合所不包含的,此枚举类剩下的枚举值
3.Enumset copyOf(Collection c):使用一个普通集合来创建EnumSet集合
4.Enumset copyOf(Enumset s):创建一个与指定EnumSet具有相同元素类型,相同集合元素的EnumSet集合
5.Enumset noneOf(Class elementType):创建一个元素类型为指定枚举类型的空EnumSet
6.Enumset of(E first,E…rest):创建一个包含一个或多个枚举值的EnumSet集合,传入的多个枚举值必须属于同一个枚举类
7.Enumset range(E from,E to):创建一个包含从from枚举值到to枚举值范围内所有枚举值的EnumSet集合。

五:List集合

List集合代表一个元素有序,可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可应通过索引来访问指定位置的集合元素。
List接口和ListIterator接口:
List作为Collection接口的子接口,可以使用Collection接口里的全部方法
1.void add(int index,Object element):将元素element插入到List集合的index处。
2.boolean addAll(int index,Collection c):将集合c所包含的所有元素都插入到List集合的index处。
3.Object get(int index):返回集合index索引处元素
4.int indexOf(Object o):返回对象o在List集合中第一次出现的位置索引
5.int lastIndexOf(Object o):返回对象o在List集合中最后一次出现的位置索引
6.Object remove(int index):删除并返回index索引出元素
7.Object set(int index,Object element):将index索引处的元素换成element对象,返回并替换的旧的元素
8.List subList(int fromIndex,int toIndex):返回从索引fromIndex(包含)到索引toIndex(不包含)处所有集合元素组成的子集合
ArrayList和Vector实现类:
ArrayList和Vector作为List类的两个典型实现,都是基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的,允许再分配的Object[]数组。ArrayList或Vector对象使用initialCapacity参数来设置数组的长度,当向ArrayList或Vector中添加元素超出了该数组的长度时,他们的initialCapacity会自动增加。
ArrayList和Vector提供如下两个方法重新分配Object[]数组:
1.void ensureCapacity(int minCapacity):将ArrayList或Vector集合的Object[]数组的长度增加大于或等于minCapacity值
2.void trimToSize();调整ArrayList或Vector集合的Object[]数组的长度为当前元素的个数。调用该方法可减少ArrayList或Vector集合对象占用的存储空间。

六: Queue集合

Queue用于模拟队列这种数据结构,队列通常指“先进先出”(FIFO)的容器。队列的头部保存在队列中存放时间最长的元素,队列的尾部保存在队列中存放时间最短的元素。新元素插入到队列的队尾,访问元素操作会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。
Queue接口中定义的方法:
1.void add(Object e):将指定元素加入此队列的尾部
2.Object element():获取队列头部的元素,但不是删除该元素
3.boolean offer(Object e):将指定元素加入此队列的尾部。当使用有容量限制的队列时,此方法通常比add(Object e)方法好
4.Object peek():获取队列头部的元素,但不是删除该元素。如果此队列为空,则返回null
5.Object poll():获取队列头部的元素,并删除该元素。如果此队列为空,则返回null
6.Object remove()::获取队列头部的元素,并删除该元素
PriorityQueue实现类:
PriorityQueue是一个比较标准的队列实现类。PriorityQueue保存队列的顺序并不是按加入队列的顺序,而是按队列元素的大小进行重新排序。因此当调用peek()方法或者poll()方法取出队列中的元素时,并不时取出最先进入队列的元素,而是取出最小的元素。从这个意义上看,PriorityQueue已经违反了队列的最基本规则:先进先出。
PriorityQueue不允许插入null元素,他还需要对队列元素进行排序,PriorityQueue的元素有两种排序方式:自然排序和定制排序。
Deque接口与ArrayDeque实现类:
Deque接口是Queue接口的子接口,它代表一个双端队列,Deque接口里定义了一些双端队列的方法:
1.void addFirst(Object e):将指定元素插入该双端队列的开头
2.void addLast(Object e):将指定元素插入该双端队列的末尾
3.Iterator descendingIterator():返回该双端队列对应的迭代器,该迭代器将以逆向顺序来迭代队列中的元素。
4.Object getFirst():获取但并不删除双端队列的第一个元素
5.Object getLast():获取但并不删除双端队列的最后一个元素
6.boolean offerFirst(Object e):将指定元素插入该双端队列的开头
7.boolean offerLast(Object e):将指定元素插入该双端队列的末尾
8.Object peekFirst():获取但并不删除双端队列的第一个元素;如果此双端队列为空,则返回null
9.Object peekLast():获取但并不删除双端队列的最后一个元素;如果此双端队列为空,则返回null
10.Object pollFirst():获取并删除双端队列的第一个元素;如果此双端队列为空,则返回null
11.Object pollLast():获取并删除双端队列的最后一个元素;如果此双端队列为空,则返回nul
12.Object pop():(栈方法)pop出该队列所表示的栈的栈顶元素,相当于removeFirst()
13.void push(Object e):(栈方法)将一个元素push进该双端队列所表示的栈的栈顶,相当于addFirst(e)
14.Object removeFirst():获取并删除双端队列的第一个元素
15.Object removeFirstOccurrence(Object e):删除该双端队列的第一次出现的元素o
16.Object removeLast():获取并删除双端队列的最后一个元素
17.Object removeLastOccurrence(Object e):删除该双端队列的最后一次出现的元素o
LinkedList实现类:
LinkedList类时List接口的实现类,这意味着他是一个List集合,可以根据所引来随机访问集合中的元素。除此之外,LinkedList还实现了Deque接口,可以被当成队列使用。

七:Map

Map用于保存具有映射关系的数据,因此Map集合里保存着两组数值,一组值用于保存Map里的Key,另一组值用于保存Map里的value,key和value都可以是引用类型的数据,Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false。
Map接口下常用方法:
1.void clear():删除该Map对象中所有key-value对
2.boolean containsKey(Object key):查询Map中是否包含指定的key,如果包含则返回true
3.boolean containsvalue(Object value):查询Map中是否包含一个或多个value,如果包含则返回true
4.Set entrySet():返回Map中包含key-value对所组成的Set集合,每个集合元素都是Map.Entry对象
5.Object get(Object key):返回指定key所对应的value,如果此Map中不包含该Key,则返回null。
6.boolean isEmpty():查询该Map是否为空,如果为空则返回true
7.Set keySet():返回该Map中所有key组成的Set集合
8.Object put(Object key,Object value):添加一个key-value对,如果当前Map中已经有一个与该key相等的key-value对,则新的key-value对会覆盖原来的key-value对
9.void putAll(MAp m):将指定Map中key-value对复制到本Map中
10.Object remove(Object key):删除指定key所对应的key-value对,返回被删除key所关联的value,如果该key不存在,则返回null
11.boolean remove(Object key,Object value):删除指定key,value所对应的key-value对,如果从该Map中成功地删除该key-value对,该方法返回true否则返回false
12.int size():返回该Map里的key-value对的个数
13.Collection values():返回该Map里所有的value组成的Collection。

Map中包括一个内部类Entry,该类封装了一个key-value对,Entry包含了如下三个方法:
1.Object getKey():返回该Entry里包含的key值
2.Object getValue():返回该Entry里包含的value值
3.Object setValue(V value):设置该Entry里包含的value值,并返回新设置的value值。