java 集合框架(三)Collection
一.概述
Collection是集合框架的根接口.不同的集合具有不同的特性,比如有的集合可以有重复元素,有的不可以,有的可以排序,有的不可排序,如此等等,而Collection作为集合的根接口,它规范定义了集合的通用方法,一个集合我们可以看作一个在内存中的小型数据库,而数据库的常用操作无外乎"增删改查",Collection中的方法也大体是这些类型操作.
此外Colletion的所有通用实现类都会有一个转换器构造方法,它接收一个Collection类型参数,这样可以以另一个Collection类型集合中元素来初始化自己,也相当于实现了集合类型的相互转换.
二.主要方法
修饰符和返回值 | 方法名 | 描述 |
添加功能 | ||
boolean | add(E) | 向集合添加一个元素,集合元素数没有变化的话返回false |
boolean | addAll(Collection<? extends E>) | 向集合添加另一个集合全部元素,集合元素数没有变化的话返回false |
删除功能 | ||
boolean | remove(Object) | 从集合移除一个元素,集合元素数没有变化的话返回false |
boolean | removeAll(Colletion<?>) | 从集合移除另一个集合中所有元素,集合元素数没有变化的话返回false |
defalut boolean | removeIf(Predicate<? super E>) | 按条件从集合中移除相应元素,集合元素没变化的话返回false |
void | clear() | 清空集合内元素 |
boolean | retainAll(Collection<?> ) | 保留交集元素,移除不在交集中的元素,集合元素数没有变化的话返回false |
判读功能 | ||
boolean | contains(Object) | 判读对象是否在集合内 |
boolean | containsAll(Collection<?>) | 判断参数集合内元素是否都在集合内 |
boolean | equals(Object) | 判断集合是否与传入对象"相等" |
boolean | isEmpty() | 判断集元素是否为空 |
获取功能 | ||
int | size() | 获取集合内实际元素数 |
Object[] | toArray() | 返回包含集合所有元素的数组 |
T[] | toArray(T[]) |
返回包含集合所有元素的数组,如果集合元素数大于传入数组长度, 返回为新建数组,否则返回为传入数组,传入数组若果有剩余,多余填 充为null值,如果数组类型与集合元素类型不符,抛出ArrayStoreException |
int | hashCode() | 返回对象哈希值 |
迭代器 | ||
Iterator | iterator() | 返回集合迭代器 |
defalut SplIteraror | splIterator() | 返回集合可分割迭代器 |
其他 | ||
defalut Stream<E> | stream() | 返回对象流 |
defalut Stream<E> | parallelStream() | 返回对象并行流 |
Colletion接口中定义的方法是集合操作中最通用的操作方法,按照对元素不同的操作类型大致可以分为添加,删除,判断,获取这四种,集合为了实现元素的遍历还要提供一个获取迭代器的方法,此外在java 8之后为了应对现在分布式并行操作需求,提供了一个可分割迭代器spliterator(),为了方便开发者对集合元素快速遍历和处理,java 8新提出的聚合操作概念,可以通过stream()和parallelStream()方法来实现聚合操作.
三.集合遍历
对于集合的遍历,我们知道Collection继承了Iterable接口.所以可以使用迭代器和for-loop以及forEach()形式进行遍历. 在Java 8之后,我们可以获取集合的流(stream),然后进行聚合操作(Aggregate Operations)遍历,而聚合操作通常与lambda表达式相结合,使得代码更简洁有力.
package com.java.collection; import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
import java.util.function.Predicate; public class TraverseTest {
public static void main(String[] args) {
Collection<String> c = new ArrayList(); c.add("aad");
c.add("bde");
c.add("cdf");
c.add("dad"); //使用聚合操作
c.stream().filter(new Predicate<String>() {
@Override
public boolean test(String s) {
return s.contains("a");
}
}).forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
System.out.println("-------------------------------------------");
//与lambda表达式结合
c.stream().filter(s -> s.contains("b"))
.forEach(s -> System.out.println(s));
}
}
控制台输出为
aad
dad
-------------------------------------------
bde
四.子接口
Set是一种无序而元素唯一的集合类型,它是比如扑克中的卡牌,学生课程表安排的课程,计算机中运行的进程这些事物的数学概念的抽象表示.Set接口相比Colletion并没有更多的操作方法,而他的子接口SortedSet和NavigableSet进行了更多的拓展,可以看出子接口中方法侧重对元素的比较和排序
List是一种有序且元素可重复的集合类型,它像数组一样可以通过索引来快速查找操作元素.
Queue是一种队列结构,它更适合用来存储数据而不是处理数据.Queue常用来做先见先出的(FIFO)的存储结构,新加入的元素会被存储在集合尾部,取出元素则会从头部取出.Deque是一种双向队列,既可以做先进先出(FIFO)也可以做先进后出(LIFO)。
java 集合框架(三)Collection的更多相关文章
- Java集合框架之Collection接口
Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下 ...
- Java集合框架(Collection Framework)学习之 Collection与Map概貌
写过Java的人都知道Java集合类,也用过Java集合类.Java集合类位于 java.util 这个包下,就像它的包名暗示的那样,Java集合类就是一套工具.它就像工匠的工具箱一样,它能给使用它的 ...
- Java 集合框架之Collection
此图是 java 中 Collection 相关的接口与类的关系的类图.其中,类只是集合框架的一部分,比较常用的一部分. 第一次画类图,着实很费劲,不过收获也不小. 下面是相关接口和类的解释说明.文字 ...
- Java集合框架(三)
Map Map集合:该集合存储键值对,一对一对的往里存,而且要保证键的唯一性. Map |------HashTable:底层是哈希表数据结构,不可以存入null键null值.该集合是线程同步的.J ...
- java集合框架02——Collection架构与源码分析
Collection是一个接口,它主要的两个分支是List和Set.如下图所示: List和Set都是接口,它们继承与Collection.List是有序的队列,可以用重复的元素:而Set是数学概念中 ...
- Java集合框架(Collection Framework)学习之 HashMap
从API文档可以得到HashMap的以下几个特点: 基于哈希表(hash table)实现,并且是链式哈希表 允许空值和空键(null=null 键值对) HashMap与Hashtable基本相同, ...
- java集合框架之Collection
参考http://how2j.cn/k/collection/collection-collection/366.html Collection是 Set List Queue和 Deque的接口Qu ...
- Java学习--java中的集合框架、Collection接口、list接口
与数组相比:1.数组的长度固定,而集合的长度可变2.数组只能通过下表访问元素,类型固定,而有的集合可以通过任意类型查找所映射的具体对象 java集合框架:collection(list序列,queue ...
- [转]Java - 集合框架完全解析
数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作.Java提供了几个能有效地组织和操作数据的数据结构,这些数据结构通常称为Java集合框架.在平常的学习开发中,灵 ...
随机推荐
- Matlab产生TestBeach所需要的波形数据
在用vivado仿真的时候,很多情况下需要自己产生波形来代替AD采样波形.以前的做法都是用DDS内部产生所需要的波形来模仿外部输入,后来发现这种做法不仅麻烦,而且不易修改,对仿真很不友好.于是改用ma ...
- __getattr__动态获取接口
# -*- coding:utf-8 -*- #在看廖雪峰的python3.5教学时,看到面向对象高级编程_定义类 https://www.liaoxuefeng.com/wiki/001431608 ...
- shell获取字符串长度
方法1: 使用wc -L命令 wc -L可以获取到当前行的长度,因此对于单独行的字符串可以用这个简单的方法获取,另外wc -l则是获取当前字符串内容的行数. 代码如下: echo "abc& ...
- C语言预处理 编译 汇编 链接四个阶段
c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接. 编译过程 编译过程又可以分成两个阶段:编译和会汇编. 编译 编译是读取源程序(字符流),对之进行词法和语法的分析,将高 ...
- XAML: 自定义控件中事件处理的最佳实践
在开发 XAML(WPF/UWP) 应用程序中,有时候,我们需要创建自定义控件 (Custom Control) 来满足实际需求.而在自定义控件中,我们一般会用到一些原生的控件(如 Button.Te ...
- C#基础(五)--枚举的含义及其应用
本章讲解如下枚举的如下几个知识点: 1.什么是枚举? 2.枚举是值类型还是引用类型? 3.如何定义枚举? 4.枚举的好处? 5.枚举在实际系统开发过程中的用处? 一 ...
- 浅析JAVA序列化
1.简述 Serialization(序列化) 是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程. 在分布式环境中,经常需要将Objec ...
- Python学习一:基础语法
---恢复内容开始--- 本博客主要记录学习Python的过程(按照金角大王老师课程学习),整理所学知识,扎实基础.如有错误,望批评指正. 1.Python所擅长的领域 Python是一门解释型语言, ...
- 获取当前进程(程序)主窗体句柄并设置wpf的父窗体为此句柄
有时候在c++调用wpf控件的时候,wpf控件想自己显示窗体,但需要设置owner属性.迂回解决办法是设置wpf的window窗体的父窗体为进程的句柄. 1.获取当前进程id int id = Pro ...
- SpringMVC源码情操陶冶-AbstractHandlerMapping
分析下springmvc的HandlerMapping映射的抽象类 初始化操作 通过initApplicationContext()方法进行初始化,其一般是由父类执行ApplicationContex ...