当前位置: 首页 > news >正文

JavaSe—集合框架、Collection集合

目录

1、认识集合框架

2、Collection集合

2.1、Collection的常用功能

2.2 Collection的遍历方式

2.2.1 方式1 迭代器遍历

2.2.2 方法2 增强for循环

2.2.3 方法3 Lambda表达式

2.2.4 Collection三种遍历方式的区别


1、认识集合框架

  • 集合是一种容器,用来装数据的。类似与数组,但集合的大小可变,开发中也非常常用

集合体系归类

集合系列结构

代码1:整体认识一下集合体系结构

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;public class CollectionDemo2 {public static void main(String[] args) {//List系列集合:添加的元素是有序的,可重复,有索引List<String> list = new ArrayList<>();list.add("hello");list.add("world");list.add("java");list.add("world");list.add("world");System.out.println("有序的,可重复->: " + list);System.out.println("通过get方法,索引->: " + list.get(0));System.out.println("set系列");//HashSet 无序,不可重复,无索引Set<String> set = new HashSet();set.add("hello");set.add("world");set.add("java");set.add("world");System.out.println("无序,不可重复->: " + set);}
}

2、Collection集合

2.1、Collection的常用功能

为什么要先学Collection呢?

  • Collection是单例集合的祖宗接口,,它规定的方法(功能)是全部单例集合都会继承的。所以学习完Collection功能其他下面子类的一些功能也就会用了。

代码2:测试上面Collection通用功能

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;  //Collection 单例类的祖宗接口public class CollectionDemo3 {public static void main(String[] args) {//认识Collection的通用功能Collection<String> list = new ArrayList();  //接口 的实例化//把给定的元素添加到相应的集合System.out.println("_________________添加元素_________________");list.add("hello");list.add("world");list.add("java");System.out.println(list);System.out.println("_________________删除元素_________________");list.remove("world");  //删除指定元素System.out.println(list);System.out.println("_________判断集合中是否有指定的对象__________");System.out.println(list.contains("hello"));System.out.println(list.contains("world"));System.out.println("______________判断集合是否为空______________");System.out.println(list.isEmpty());System.out.println("_______________返回集合的大小_______________");System.out.println(list.size());System.out.println("________________清空集合___________________");list.clear();System.out.println(list);System.out.println("_____________把集合中的元素存储到数组_________");list.add("hello");list.add("world");list.add("java");String [] arr = list.toArray(new String[0]); //这里是JDK1.8下System.out.println(Arrays.toString(arr));  //输出数组}
}
/*
_________________添加元素_________________
[hello, world, java]
_________________删除元素_________________
[hello, java]
_________判断集合中是否有指定的对象__________
true
false
______________判断集合是否为空______________
false
_______________返回集合的大小_______________
2
________________清空集合___________________
[]
_____________把集合中的元素存储到数组_________
[hello, world, java]
/

2.2 Collection的遍历方式

2.2.1 方式1 迭代器遍历

  • 迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器代表是Iterator。

  • 包路径java.util.Iterator
  • 作用:用于遍历 Collection 类型的集合(如 ListSetQueue 等)。
  • 特点
    • 只能单向遍历(从前到后)。
    • 支持在遍历过程中安全删除元素
    • 避免 ConcurrentModificationException(如果使用正确)。

Iterator迭代器

Collection集合获取迭代器的方法

方法名称说明
Iterator<E> iterator()返回集合的迭代器对象,该迭代器对象默认指向当前集合的第一个元素

Iterator迭代器中的常用方法

方法返回类型说明
hasNext()boolean询问当前位置是否有元素存在,存在返回true,不存在返回false
next()E获取当前位置的元素,并同时将迭代器对象执向下一个元素处。
remove()void 可选操作。从底层集合中移除 next() 方法返回的最后一个元素。此方法只能在每次调用 next() 之后调用一次。如果在没有调用 next() 的情况下调用,或者连续调用两次 remove(),会抛出 IllegalStateException

代码3:迭代器遍历演示

import java.util.ArrayList;
import java.util.Iterator;public class CollectionIteratorDemo4 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.add("hello");list.add("world");list.add("java");list.add("kk");Iterator< String> it = list.iterator();while(it.hasNext()){System.out.printf(it.next() + "  ");}System.out.println();}
}
/*
hello  world  java  kk  */

2.2.2 方法2 增强for循环

代码4:增强for遍历演示

import java.util.ArrayList;
public class CollectionForMaxDemo5 {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);for (int i: list){System.out.printf("%d ", i);}System.out.println();}
}
/*
1 2 3 4 */

2.2.3 方法3 Lambda表达式

代码5:forEach遍历演示

import java.util.ArrayList;
import java.util.function.Consumer;public class CollectionLambdaDemo6 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("hello");list.add("world");list.add("java");list.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});//Lambda简化list.forEach(s-> System.out.println(s));//方法引用list.forEach(System.out::println);}
}
/*
hello
world
java
hello
world
java
hello
world
java*/

2.2.4 Collection三种遍历方式的区别

认识并发修改异常问题

  • 遍历集合的同时又存在增删集合元素的行为时可能出现业务异常,这种现象被称之为并发修改异常问题。

代码6:区别3中种遍历

import java.util.ArrayList;
import java.util.*;public class CollectionTest7 {public static void main(String[] args) {//搞清楚并发修改异常问题ArrayList<String> list = new ArrayList<>();list.add("Java");list.add("宁夏枸杞");list.add("黑枸杞");list.add("枸杞子");list.add("红枸杞");list.add("枸杞");list.add("C++");
//        System.out.println(list);
//
//
//        for(int i = 0;i < list.size();i++){
//            String s = list.get(i);
//            if(s.contains("枸杞")){
//                list.remove(s);
//            }
//        }
//        System.out.println( list); //发现并不满足要求 [Java, 黑枸杞, 红枸杞, C++]/*解决方案一:前提支持索引删除集合中包含枸杞的元素,倒着遍历能够解决修改异常问题*/ArrayList<String> list2 = new ArrayList<>();list2.add("Java");list2.add("宁夏枸杞");list2.add("黑枸杞");list2.add("枸杞子");list2.add("红枸杞");list2.add("枸杞");list2.add("C++");System.out.println("===================================");for(int i = list2.size() - 1;i >= 0;i--){String s = list2.get(i);if(s.contains("枸杞")){list2.remove(s);}}System.out.println( list2);System.out.println("===================================");/*解决方案二:i--;前提支持索引*/ArrayList<String> list3 = new ArrayList<>();list3.add("Java");list3.add("宁夏枸杞");list3.add("黑枸杞");list3.add("枸杞子");list3.add("红枸杞");list3.add("枸杞");list3.add("C++");for(int i = 0; i< list3.size();i++){if(list3.get(i).contains("枸杞")){list3.remove(i);i--;}}System.out.println( list3);System.out.println("==============使用迭代器=============");/*当集合没有索引的使用方案1:使用迭代器,迭代器遍历并删除也会存在并发修改异常问题可以解决:使用迭代器自己的remove()方法*/ArrayList<String> list4 = new ArrayList<>();list4.add("Java");list4.add("宁夏枸杞");list4.add("黑枸杞");list4.add("枸杞子");list4.add("红枸杞");list4.add("枸杞");list4.add("C++");Iterator< String> it = list4.iterator();while(it.hasNext()){String s = it.next();if(s.contains("枸杞")){it.remove();  //注意:这里的remove()方法是迭代器的方法,不是集合的remove()方法}}System.out.println( list4);System.out.println("===================================");/*使用for 和 Lambda当没有索引的时候,删除集合中包含枸杞的元素不能解决:并发修改异常问题*/ArrayList<String> list5 = new ArrayList<>();list5.add("Java");list5.add("宁夏枸杞");list5.add("黑枸杞");list5.add("人字拖");list5.add("枸杞子");list5.add("红枸杞");list5.add("枸杞");list5.add("C++");
//        for(String s : list5){
//            if(s.contains("枸杞")){
//                list5.remove(s);
//            }
//        }
//        list5.forEach(s->{
//            if(s.contains("枸杞")){
//                list5.remove(s);
//            }
//        });
//        System.out.println( list5);}
}
/*
===================================
[Java, C++]
===================================
[Java, C++]
==============使用迭代器=============
[Java, C++]
===================================*/

总结:解决并发修改异常问题的方案


       Ok关于List和Set集合后期会持续更新。

http://www.dtcms.com/a/561106.html

相关文章:

  • 面试redis篇———缓存击穿和缓存雪崩问题及解决策略
  • Redis Stream:高效的消息队列解决方案
  • 杭州设计门户网站中文搜索引擎有哪些平台
  • 【操作系统】408核心考点深度解析|进程通信:三大机制(共享存储/消息传递/管道)详解与对比
  • 长沙网站建立公司网站规范化建设
  • 基于微信小程序的防诈骗管理系统
  • 孤能子视角:EIS六线分析之“王东岳递弱代偿理论“
  • RHCE第五次作业
  • 差分隐私:机器学习和数据发布中的隐私守护神
  • GEO实战:如何让AI正确理解你的专业服务?
  • ARM《9》_在linux中编写内核模块(单.c文件、多.c文件)、内核模块传参(传参、回调)、内核模块互调
  • 兴安盟网站建设桂林软件开发公司
  • 输入关键词自动生成文章宁波seo排名优化教程
  • 【Android Activity】生命周期深入理解
  • 哪些资产最适合RFID技术管理?
  • 如何做网站的书籍建设部网站 专业评估
  • 网站排名下降东莞纸箱定制 技术支持 东莞网站建设
  • 组合数学第六章 容斥定理
  • vscode 安装Jupiter以后,终端无法切换conda环境了
  • 潍坊网站制作最低价格wordpress现在还慢吗
  • 785.力扣LeetCode_ 判断二分图
  • 如何使用表格做网站百度开户推广
  • Go语言设计模式:抽象工厂模式详解
  • 网站建设 东营远见网络公司做电脑网站步骤
  • 开发实战 - ego商城 - 7 地址管理模块
  • dz网站源码流量卡套餐
  • Kruskal 算法深入
  • 学习RT-thread(RT-thread定时器)
  • 基于整数MCU的FOC电机控制深度解析:从浮点到定点的工程实践
  • 在整数MCU上实现快速除法计算:原理、方法与优化