一, JAVA 集合类
为了保存数量不确定的数据, 以及保存具有映射关系的数据(关联数组),java 提供了集合类. 所有集合类位于 java.util 包下.
集合类就像容是器, 现实生活中容器的功能, 无非就是添加对象, 删除对象, 清空容器, 判断容器是否为空等, 集合类就为这些功能提供对应的方法.
java 集合类是由两个接口 Collection 和 Map 派生而出
Collection | Map | ||
Set | Queue | List | EnumMap IdentityHashMap HashMap LinkedHashMap Hashtable Properties SortedMap TreeMap WeakHashMap |
EnumSet SortedSet HashSet TreeSet LinkedHashSet | Deque PriorityQueue ArrayDeque | LinkedList ArrayList Vector Stack |
Map 实现类用于保存具有映射关系的数据.
Set 无法记住添加元素的顺序, 所有元素不能重复且无序
List 像一个长度可变的数组
二, Collection 和 Iterator 接口
Iterator 类与 Collection,Map 不同, 主要用于遍历 Collection 中的元素, 其对象也被称为迭代器
1,Collection 使用如下:
Boolean add(Object o ) 添加对象, 成功添加返回 true
Boolean addAll(Collection c) 将集合 C 中所有元素加入, 成功返回 true
Void clear(); 清空容器
Boolean contains(Object o ) 返回集合里是否包含指定元素
Boolean containsAll(Collection c) 返回是否包含集合内所有元素
Boolean isEmpty() 返回集合是否为空
Iterator iterator(); 返回一个 Iterator 对象, 用于遍历集合里的元素
Boolean remove(Object o) 删除集合中指定元素, 如果有多个 o 元素时, 删除第一个符合条件的元素
Boolean removeAll(Collection c) 删除 c 中包含的所有元素
Boolean retainAll(Collection c ) 删除集合中不属于集合 c 的元素
Int size() 返回集合元素个数
Object[] toArray() 将集合转化为数组, 集合元素变为数组元素
Collection 实现类都重写了 toString()方法, 使用 System.out.println()输出集合对象时, 将输出 [ele1,ele2.......] 的形式.
2, 遍历 Collection
遍历过程中不要使用集合的 remove 对集合进行删除操作, 会抛出异常
Iterator 迭代器的使用
Boolean hasNext() 如果被迭代的集合元素还没有遍历完, 返回 TRUE
Object next(); 返回集合中的下一个元素(传值不传对象)
Void remove() 从集合中删除上一个用 next 返回的元素
Void forEachRemaining(Consumer action) 可使用 Lambda 表达式来遍历
程序示范 4 种迭代方式:
- public static void main(String[] args) {
- ...........................
- // 获取 books 集合对应的迭代器
- Iterator it = books.iterator();
- //1. 使用 Lambda 表达式遍历集合
- books.forEach(obj->System.out.println("迭代集合元素:"+obj));
- //2. 使用 Iterator 遍历集合
- while(it.hasNext()) { // 迭代是否结束
- // 返回 Object 类型的数据, 需要强制转换
- String book = (String)it.next();
- System.out.println(book);
- if(book.equals("迭代器")) {
- // 从集合中删除 book 对应的元素
- it.remove();
- }
- ......
- }
- ..........
- //3. 使用 Lambda 表达式遍历 Iterator
- it.forEachRemaining(obj->System.out.println("迭代集合元素:"+obj));
- //4. 使用 foreach 循环遍历集合元素
- for(Object obj : books){
- String book = (String)obj;
- ..........
- }
- }
3,Predicate 操作集合
removeIf(Predicate filter)方法
- // 批量删除符合条件的元素(过滤集合), 删除所有长度小于 10 的字符串元素
- Book.removeIf(ele -> ((String)ele).length()<10);
使用 Predicate 可以充分简化集合的运算
例如: Predicate 的 test 方法可以判断该对象是否满足 Predicate 指定的条件, 对于统计集合中符合某个条件的元素有多少, 只需要构造一个方法:
- public static void main(String[] args) {
- // 统计包含 "Predicate" 的元素
- System.out.println(calAll(books,ele -> ((String)ele).contains("Predicate")));
- // 统计包含 "test" 的元素
- System.out.println(calAll(books,ele -> ((String)ele).contains("test")));
- // 统计字符串大于 10 的元素
- System.out.println(calAll(books,ele -> ((String)ele).length()>10));
- }
- public static int calAll(Collection books,Predicate p) {
- int count = 0;
- for(Object obj : books) {
- if(p.test(obj)) { // 满足 Predicate 则 ++
- count++;
- }
- }
- return count;
- }
来源: https://www.cnblogs.com/JIATCODE/p/12287205.html