java集合(1)

news2024/10/7 16:21:46

目录

一.集合概述

二. 集合体系概述

1. Collection接口

1.1 List接口

1.2 Set接口

2. Map接口

三. ArrayList

1.ArrayList常用方法

2.ArrayList遍历

2.1 for循环

2.2 增强for循环

2.3 迭代器遍历


一.集合概述

我们经常需要存储一些数据类型相同的元素,之前我们学过的容器就是数组,但是数组存在一个问题

1.数组的长度一旦确定就不能改变

但是我们在实际开发中,往往需要动态增长的容器来帮我们存储数据,显然只用数组的话需要自己去创建新数组并拷贝元素,这大大降低了开发效率,所以java提供了底层不同实现的数据结构的容器称为集合

二. 集合体系概述

1. Collection接口

Collection是一个接口,里面可以定义抽象方法,常量,静态方法,默认方法(jdk8及之后),该接口是单列集合的父接口,其中主要用于定义一些单列集合通用的方法,例如:单列集合的增删改查

1.1 List接口

 List接口继承了Collection接口,List接口下的实现类允许出现重复元素,可以用索引和迭代器访问,主要有ArrayList,LinkedList,Vector等实现类

1.2 Set接口

Set接口同样继承了Collection接口,Set接口下的实现类不允许出现重复元素,且不能用索引访问,只能用迭代器访问,主要有HashSet,TreeSet等实现类

2. Map接口

Map是一个接口,里面可以定义抽象方法,常量,静态方法,默认方法(jdk8及之后),该接口是双列(键值对存储)集合的父接口,其中主要定义一些双列集合通用的方法,例如:双列集合的增删改查,主要有HashMap等实现类

三. ArrayList

ArrayList是List接口下的一个实现类,底层是一个可以动态增长的数组,所有的集合容器中都可以添加任意类型的数据,但为了使用时的统一,用一个<>指明集合中的元素类型,这是泛型,例如:<String>

1. ArrayList常用方法

size()返回集合中实际元素个数
add(E e)向集合末尾添加元素,添加成功返回true,添加失败返回false
add(int index,E e)向指定位置处添加元素
remove(Object o)删除指定内容的元素,删除成功返回true,删除失败返回false
remove(int index)删除指定位置处的元素,删除成功会把该值返回
get(int index)获取指定位置处的元素
indexOf(Object o)从左向右查找指定元素,找到返回下标,找不到返回-1
lastIndexOf(Object o)从右向左查找指定元素,找到返回下标,找不到返回-1
set(int index,E element)用指定的元素替换指定位置的元素,同时返回旧元素
isEmpty()判断集合是否为空
contains(Object o)判断集合中是否包含指定元素

四. LinkedList

LinkedList是List接口下的一个实现类,底层是链表结构

1.LinkedList常用方法

int size()返回集合中的元素个数
boolean add(E e)向集合尾部添加指定元素,添加成功返回true,添加失败返回false
void add(int index,E element()向指定位置添加指定元素
        E get(int index)获取指定位置的元素
boolean remove(Object o)删除指定元素,删除成功返回true,删除失败返回false
E remove(int index)删除指定位置的元素,并将其返回
E remove()删除头部的元素并返回
void addFirst(E e)向头部添加元素
E removeLast()删除尾部元素并返回
void addLast(E e)向尾部添加元素
E pop()删除头部元素并返回
void clear()清空链表元素
boolean isEmpty()判断链表是否为空
boolean contains(Object o)判断链表中是否包含指定元素

五. Vector

vector和ArrayList底层都是数组,且两者所拥有的方法也都是相同的,唯一的不同是,Vector的方法中被synchronized修饰,是线程安全的,它们两者的关系就好像StringBuffer和StringBuilder的关系一样

六. List接口下的实现类的遍历

这里以ArrayList为例,LinkedList和vector也是类似的

1. for循环

public class ArrayListDemo4 {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("a");
        arrayList.add("a");
        arrayList.add("a");
        arrayList.add("b");
        arrayList.add("c");
        arrayList.add("d");


        for(int i = 0;i < arrayList.size(); i++){

            if("a".equals(arrayList.get(i))){
                arrayList.remove("a");
                i--;
            }
        }
     }
}

注意:用for循环删除集合中的元素时要注意索引和元素位置的变化,将索引减回去,避免删除元素不彻底

2. 增强for循环

public class ArrayListDemo4 {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("a");
        arrayList.add("a");
        arrayList.add("a");
        arrayList.add("b");
        arrayList.add("c");
        arrayList.add("d");


        /*
        2.增强for循环
        增强for循环遍历元素时,不允许修改集合元素(删除,添加)
         */

        for(String s:arrayList){
            //arrayList.remove(s);
            System.out.print(s+" ");
            //arrayList.add("1");
        }


     }
}

 注意:在使用增强for循环遍历集合时不能对集合进行增删改查等操作 

3. 迭代器遍历

public class ArrayListDemo4 {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("a");
        arrayList.add("a");
        arrayList.add("a");
        arrayList.add("b");
        arrayList.add("c");
        arrayList.add("d");


        /*
        迭代器遍历
         */
        //获得集合对象的迭代器对象
       Iterator<String> it = arrayList.iterator();

        //正向遍历
       while(it.hasNext()) {
           String s = it.next();//获取到下一个元素
           System.out.print(s+" ");
           /*if(s.equals("b")){
               it.remove();//使用迭代器对象删除元素
           }*/
       }
        System.out.println();




       //ListIterator 迭代器 只能对List接口下的实现类遍历
        //listIterator(index);可以从指定的位置开始向前或者向后遍历

        ListIterator<String> listIterator = arrayList.listIterator(1);

        while(listIterator.hasNext()){
            System.out.print(listIterator.next()+" ");
        }

        System.out.println();

         //反向遍历
        ListIterator<String> listIterator1 = arrayList.listIterator(arrayList.size());
        while(listIterator1.hasPrevious()){
            System.out.print(listIterator1.previous()+" ");
        }


    }
}

使用迭代器遍历集合是更推荐的方法,它既可以在遍历时对集合进行操作,也不用自己去管下一个元素是否会被略过

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1898207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ-订阅一致及解决方案

背景 这里借用Rocketmq官方的一句话来描述订阅关系一致: 订阅关系一致指的是同一个消费者分组Group ID下&#xff0c;所有Consumer实例所订阅的Topic和Tag必须完全一致。如果订阅关系不一致&#xff0c;可能导致消息消费逻辑混乱&#xff0c;消息被重复消费或遗漏。 具体的问题…

MySQL中mycat与mha应用

目录 一.Mycat代理服务器 1.Mycat应用场景 2.mycat安装目录结构说明 3.Mycat的常用配置文件 4.Mycat日志 5.mycat 实现读写分离 二.MySQL高可用 1.原理过程 2.MHA软件 3.实现MHA 一.Mycat代理服务器 1.Mycat应用场景 Mycat适用的场景很丰富&#xff0c;以下是几个典型…

【Java11】变量的初始化和内存中的运行机制

成员变量的初始化和内存中的运行机制 系统加载类或创建类的实例时&#xff0c;系统自动为成员变量分配内存空间&#xff0c;然后自动为成员变量指定初始值。 class Person {public String name; // 实例变量public static int eyeNum; // 类变量 }var p1 Person(); var p2 …

【unity实战】Unity中使用A*寻路+有限状态机制作一个俯视角敌人AI

最终效果 文章目录 最终效果前言A*寻路插件介绍下载导入AI插件生成寻路网格节点的类型障碍物寻路测试A*只打印报错信息 代码控制寻路动画配置敌人状态机各种状态脚本效果完结 前言 前面做过有限状态机制作一个敌人AI&#xff1a;【unity实战】在Unity中使用有限状态机制作一个…

【Odoo开源ERP】别把ERP与进销存软件混为一谈

导读&#xff1a;企业使用ERP软件能够实现管理升级&#xff0c;多方信息集成&#xff0c;按照既定策略逻辑运算&#xff0c;生成计划建议&#xff0c;减少人力成本&#xff0c;提高准确率的同时提高经营能力。 ERP&#xff0c;是MRP II的下一代软件&#xff0c;除了MRP II已有的…

WEB安全-靶场

1 需求 2 语法 3 示例 男黑客|在线渗透测试靶场|网络安全培训基地|男黑客安全网 4 参考资料

三万字带你一遍跑通uer

三万字带你一遍跑通uer 参考文档 今天给大家介绍个非常强大的项目uer&#xff0c;集成了许多可以做自然语言的东西&#xff0c;效果的话也非常好&#xff0c;很适合企业级的应用&#xff01; 1. 先将项目uer从github拉取下来&#xff08;zip或git都ok&#xff09; 2. 用pycha…

Vue88-Vuex中的mapActions、mapMutations

一、mapMutations的调用 此时结果不对&#xff0c;因为&#xff1a;若是点击事件不传值&#xff0c;默认传的是event&#xff01;&#xff0c;所以&#xff0c;修改如下&#xff1a; 解决方式1&#xff1a; 解决方式2&#xff1a; 不推荐&#xff0c;写法麻烦&#xff01; 1-…

【代码大全2 选读】看看骨灰级高手消灭 if-else 逻辑的瑞士军刀长啥样

文章目录 1 【写在前面】2 【心法】这把瑞士军刀长啥样3 【示例1】确定某个月份的天数&#xff08;Days-in-Month Example&#xff09;4 【示例2】确定保险费率&#xff08;Insurance Rates Example&#xff09;5 【示例3】灵活的消息格式&#xff08;Flexible-Message-Format …

基于深度学习的图像背景剔除

在过去几年的机器学习领域&#xff0c;我一直想打造真正的机器学习产品。 几个月前&#xff0c;在参加了精彩的 Fast.AI 深度学习课程后&#xff0c;似乎一切皆有可能&#xff0c;我有机会&#xff1a;深度学习技术的进步使许多以前不可能实现的事情成为可能&#xff0c;而且开…

链篦机回转窑球团生产工艺

生球在回转窑氧化焙烧&#xff0c;回转窑头部设有燃烧器&#xff0c;燃料可以采用气体、固体、液体。 来自环冷机一冷却段的高温废气作为二次风进入窑内参与燃烧&#xff0c;烧成成品球进入环冷机。 环冷机采用鼓风冷却&#xff0c;热风风箱分为四段&#xff1a; 一段气体引至…

人工智能系列-numpy(三)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 副本和视图 副本 副本是一个数据的完整的拷贝&#xff0c;如果我们对副本进行修改&#xff0c;它不会影响到原始数据&#xff0c;物理内存不再同一位置。副本一般发生在Pytho…

中英双语介绍英国伦敦(London)

中文版 伦敦简介 伦敦&#xff08;London&#xff09;是英国的首都&#xff0c;也是全球最重要的金融、文化、艺术和交通中心之一。作为一座历史悠久的城市&#xff0c;伦敦融合了现代化的城市生活与丰富的历史遗产。以下是对伦敦的详细介绍&#xff0c;包括其经济状况、高等…

zed摄像头 orin域控掉帧问题

cpu性能并没有吃满&#xff0c;双目摄像头的帧率忽高忽低 原因是域控没有开性能模式&#xff0c;调成MAXN模式就行。

实在智能对话钉钉:宜搭+实在Agent,AI时代的工作方式

比起一个需求需要等产品、技术排期&#xff0c;越来越多的人开始追求把自己武装成「全能战士」&#xff0c;通过低代码工具一搭&#xff0c;一个高效的工作平台便产生了。 宜搭是钉钉自研的低代码应用构建平台&#xff0c;无论是专业开发者还是没有代码基础的业务人员&#xf…

PCL从理解到应用【03】KDTree 原理分析 | 案例分析 | 代码实现

前言 本文分析KDTree的原理&#xff0c;集合案例深入理解&#xff0c;同时提供源代码。 三个案例&#xff1a;K近邻搜索、半径内近邻搜索、近似最近邻搜索。方法对比&#xff0c;如下表所示&#xff1a; 特性K近邻搜索半径内近邻搜索近似最近邻搜索描述查找K个最近邻点查找指…

spdlog一个非常好用的C++日志库(五): 源码分析之线程池thread_pool

目录 1.线程池 2.thread_pool简介 3.多生产者-多消费者阻塞队列模型 3.1.阻塞与非阻塞方式插入数据 3.2.取出数据 3.3.overrun异常处理机制 3.4.其他接口 4.环形队列circular_q 5.thread pool模型 6.thread pool实现 6.1.thread_pool类接口 6.2.构造与析构 6.3.po…

pip install包出现哈希错误解决

如图&#xff0c;当遇到此类错误时&#xff0c;多半是连接不稳定导致的校验失败。我们可以在PC端&#xff0c;或Ubuntu通过浏览器下载.whl安装文件&#xff1a;直接复制报错信息中的网址到浏览器即可弹出下载窗口。

tomcat 安装和优化

tomcatat tomcat和http一样&#xff0c;都是用来处理动态页面的 tomcat也可以作为web服务器&#xff0c;开源的 php.php tomcat.jsp nginx.html tomcat使用java代码写的程序&#xff0c;运行的是java的web服务程序 tomcat的特点和功能&#xff1a; 1、servlet容器&…

【笔记】TimEP Safety Mechanisms方法论

1.TimEPM Overview 三大监控方法: Alive Supervision 实时监督Logical Supervision 逻辑监督Deadline Supervision 限时监督相关模块框图: 相关模块调用框图: 每个MCU核开启内狗(1核1狗),内狗用于监控相应核的TASK超时,超时后软reset MCU内狗时钟需要独立于OS时钟,两…