Java Collection接口及方法

Java Collection接口及方法

文章目录

  • Java Collection接口及方法
    • 常用方法
      • 添加
      • 判断
      • 删除
      • 其他
    • 集合与数组的相互转换
      • 将集合转化为数组
      • 将数组转化为集合
    • 使用要求
    • Iterator(迭代器)接口
      • Iterator接口
      • 如何使用迭代器遍历元素
      • 错误的遍历
      • 增强for循环的使用(JDK5.0新特性)

Java 集合框架概述

  • java.util.Collection 用于存储一个一个的数据
  • 子接口List 存储有序的、可重复的数据 ("动态"数组)
    • 实现类 : ArrayListLinkedListVector
  • 子接口Set 存储无序的、不可重复的数据 (和数学中的集合类似)
    • 实现类: HashSetLinkedHashSetTreeSet
  • java.util.Map 用于存储一对一对的数据 (key–value键值对)
  • 实现类 HashMapLinkedHashMapTreeSetHashtableProperties

常用方法

添加

  • add(E obj):添加元素对象到当前集合中
  • addAll(Collection other):添加other集合中的所有元素对象到当前集合中,即this = this ∪ other
public class CollectionTest{public static void main(String []args){Collection coll = new ArrayList();//add()coll.add("AA");coll.add(123);  //自动装箱coll.add(new Object());System.out.println(coll);   //[AA, 123, java.lang.Object@7291c18f]//addAll(Collection other)Collection coll1 = new ArrayList();coll1.add("acb");coll1.addAll(coll);System.out.println(coll1);  //[acb, AA, 123, java.lang.Object@7291c18f]}
}

addaddAll区别

  • 对于addAll, addAll(Collection other) 是将other中所有的元素,加入到使用方法对象中
  • 对于add, add(Collection) 是将collection看作一个整体,算作一个元素
public class Test{public static void main(String []args){Collection coll = new ArrayList();coll.add("ABC");coll.add("DEF");Collection coll1 = new ArrayList();Collection coll2 = new ArrayList();coll1.add(coll);coll2.addAll(coll);System.out.println(coll1);  //[[ABC, DEF]]System.out.println(coll1.size());   //1System.out.println(coll2);  //[ABC, DEF]System.out.println(coll2.size());   //2}
}

判断

3int size():获取当前集合中实际存储的元素个数
(4boolean isEmpty():判断当前集合是否为空集合
(5boolean contains(Object obj):判断当前集合中是否存在一个与obj对象equals返回true的元素
(6boolean containsAll(Collection coll):判断coll集合中的元素是否在当前集合中都存在。即coll集合是否是当前集合的“子集”
(7boolean equals(Object obj):判断当前集合与obj是否相等
public class Test{public static void main(String []args){Collection coll = new ArrayList();coll.add("ABC");coll.add(123);//size()System.out.println(coll.size());    //2//isEmpty()System.out.println(coll.isEmpty()); //false//contains()System.out.println(coll.contains("ABC"));   //trueSystem.out.println(coll.contains("123"));   //falseSystem.out.println(coll.contains(123)); //trueSystem.out.println(coll.contains(12));  //false//containsAll()Collection coll1 = new ArrayList();coll1.add(123);coll1.add("ABC");coll1.add("DEF");System.out.println(coll1.containsAll(coll));    //true}
}

删除

8void clear():清空集合元素
(9boolean remove(Object obj) :从当前集合中删除第一个找到的与obj对象equals返回true的元素。 (考虑结果时,应考虑是否		equals方法)10boolean removeAll(Collection coll):从当前集合中删除所有与coll集合中相同的元素。即this = this - this ∩ coll
(11boolean retainAll(Collection coll):从当前集合中删除两个集合中不同的元素,使得当前集合仅保留与coll集合中的元素相同的元素,即当前集合中仅保留两个集合的交集,即this  = this ∩ coll;
public class Test{public static void main(String []args){Collection coll = new ArrayList();coll.add("AA");//clear()coll.clear();System.out.println(coll);       //[]System.out.println(coll.size());    //0coll.add("AA");coll.add("BB");coll.add("CC");//remove()coll.remove("BB");coll.remove("Bc");System.out.println(coll);   //[AA, CC]}
}

其他

12Object[] toArray():返回包含当前集合中所有元素的数组
(13hashCode():获取集合对象的哈希值
(14iterator():返回迭代器对象,用于集合遍历
  • Object[] toArray()
public class Test{public static void main(String []args){Collection coll = new ArrayList();coll.add("AA");coll.add(3);Object []arr = coll.toArray();System.out.println(Arrays.toString(arr));	//[AA, 3]}
}

集合与数组的相互转换

将集合转化为数组

使用toArray()方法

public class MethodTest{public static void main(String []args){Collection coll = new ArrayList();coll.add("AA");coll.add("BB");coll.add("CC");Object[] arr = coll.toArray();System.out.println(Arrays.toString(arr));   //[AA, BB, CC]}
}

将数组转化为集合

使用Arrays.asList(Object )方法

public class MethodTest{public static void main(String []args){String[] arr = new String[]{"AA","BB","CC"};Collection coll = Arrays.asList(arr);System.out.println(coll);   //[AA, BB, CC]}
}

使用解析

public class Test{public static void main(String []args){Integer[] arr = new Integer[]{1,2,3};List list1 = Arrays.asList(arr);System.out.println(list1);System.out.println(list1.size());//[1, 2, 3]//3int []arr1 = new int[]{1,2,3};List list2 = Arrays.asList(arr1);System.out.println(list2);System.out.println(list2.size());//[[I@6b71769e]//1}
}

使用要求

Collection中添加元素,其元素所属类一定要重写equals()

因,Collection中,在使用相关方法时contains()\remove(),要调用元素所在类的equals()

Iterator(迭代器)接口

Iterator接口

Iterator接口的常用方法

  • public E next():返回迭代的下一个元素。
  • public boolean hasNext():如果仍有元素可以迭代,则返回 true。

如何使用迭代器遍历元素

使用public E next()方法

  • 当已知元素个数时,可以使用for循环,(不推荐)
public class Test{public static void main(String []args){Collection coll = new ArrayList();coll.add("AA");coll.add("BB");coll.add(123);//获取迭代器的对象Iterator iterator = coll.iterator();//方式一,当元素个数已知 | 不推荐使用for (int i = 0; i < coll.size(); i++) {System.out.println(iterator.next());}}
}
  • 使用hasNext()判断是否仍有元素可以迭代
public class Test{public static void main(String []args){Collection coll = new ArrayList();coll.add("AA");coll.add("BB");coll.add("CC");Iterator iterator = coll.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}}
}

错误的遍历

错误一

public class Test{public static void main(String []args){Collection coll = new ArrayList();coll.add("AA");coll.add("BB");coll.add(123);coll.add(456);Iterator iterator = coll.iterator();while(iterator.next() != null){System.out.println(iterator.next());}//BB//456}
}
//会跳值

错误二 使用匿名对象

public class Test{public static void main(String []args){Collection coll = new ArrayList();coll.add("AA");coll.add("BB");coll.add(123);coll.add(456);while(coll.iterator().hasNext()){System.out.println(coll.iterator().next());}}
}
//每次调用coll.iterator() 都会返回一个新的迭代器对象

增强for循环的使用(JDK5.0新特性)

foreach循环,专门用来遍历集合或数组

for(元素的数据类型 局部变量 : Collection集合或数组){ //操作局部变量的输出操作
}
//这里局部变量就是一个临时变量,自己命名就可以
public class ForTest{@Testpublic void test11(){Collection coll = new ArrayList();coll.add("AA");coll.add("BB");coll.add(123);coll.add(456);for (Object obj : coll){System.out.println(obj);}//AA//BB//123//456}
}

说明

  • 针对于集合来讲,增强for循环的底层逻辑仍然是迭代器。
  • 增强for循环的执行过程中,是将集合或数组中的元素依次赋值给临时变量。循环体中对临时变量的修改,可能不会导致原有集合或数组中元素的更改。

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

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

相关文章

昇思25天学习打卡营第2天|onereal》

今天学习内容是了解华为昇思平台。虽然打了卡&#xff0c;但是我的jupyter里面并没有播放按钮&#xff0c;所以还是无法运行代码。反映给昇思吴彦祖小哥了&#xff0c;他说需要专家帮我解决。 我还是要自我表扬一下&#xff0c;不懂就问&#xff0c;切莫不懂装懂&#xff0c;那…

基于51单片机的RFID门禁系统-LCD12864显示

一.硬件方案 本RFID系统设计可分为硬件部分和软件部分。硬件部分以MFRC522射频识别模块为核心&#xff0c;结合主控模块STC89C52设计系统的外围硬件电路&#xff0c;实现对射频卡的控制与MCU之间的互通。软件部分采用C语言进行系统的下位机程序的开发&#xff0c;完成与IC卡之…

Windows 根据github上的环境需求,安装一个虚拟环境,安装cuda和torch

比如我们在github上看到一个关于运行环境的需求 Installation xxx系统Python 3.xxx CUDA 9.2PyTorch 1.9.0xxxxxx 最主要的就是cuda和torch&#xff0c;这两个会卡很多环境的安装。 我们重新走一遍环境安装。 首先创建一个虚拟环境 conda create -n 环境名字 python3.xxx…

【算法学习】判断点在多边形内外的算法以及确定内外两点连线与边界的交点

1.前言&#xff1a; 在GIS开发中&#xff0c;经常会遇到确定一个坐标点是否在一块区域的内部这一问题。 如果这个问题不是一个单纯的数学问题&#xff0c;例如&#xff1a;在判断DEM、二维图像像素点、3D点云点等含有自身特征信息的这些点是否在一个区域范围内部的时候&#x…

Kafka Stream 流处理设计概述

Kafka Stream 流处理设计概述 Kafka 流处理是指使用 Kafka 及其生态系统中的组件来处理实时数据流。Kafka Streams 是 Kafka 官方 提供的流处理库,它简化了构建流处理应用程序的过程,并与 Kafka 无缝集成。以下是 Kafka 流处理的设 计原理和相关概念。 1. Kafka 流处理基本…

第9章 EM算法:例题及课后习题

1 概要 1&#xff0e;EM算法是含有隐变量的概率模型极大似然估计或极大后验概率估计的迭代算法。含有隐变量的概率模型的数据表示为 P ( Y , Z ∣ θ ) P(Y,Z|\theta) P(Y,Z∣θ)。这里&#xff0c; Y Y Y是观测变量的数据&#xff0c; Z Z Z是隐变量的数据&#xff0c; θ \t…

浅谈Python中kwargs、动态属性和元类

有些Python的开源库会用到类的动态属性&#xff0c;其中关键字参数是主要实现方式之一。结合使用__init__方法和**kwargs&#xff0c;可以定义一个支持任意属性的类模板。此外&#xff0c;使用元类可以定义一个更加规范的类模版&#xff0c;为类型提供统一管理和规范定义。 这…

XGBoost算法深度解析:原理、实现与应用

摘要 XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;是一种高效的机器学习算法&#xff0c;以其出色的预测性能和计算效率在众多数据科学竞赛和实际应用中取得了巨大成功。本文将深入探讨XGBoost算法的基本原理、实现机制、优化技巧以及在不同领域的应用案例。 1…

SmartEDA革新来袭:融合Multisim与Proteus精髓,引领电子设计新纪元!

在电子设计领域&#xff0c;每一次技术的革新都如同春风化雨&#xff0c;滋润着设计师们的心田。今天&#xff0c;我们迎来了一个划时代的电子设计自动化&#xff08;EDA&#xff09;工具——SmartEDA&#xff0c;它不仅融合了业界知名的Multisim和Proteus的精华&#xff0c;更…

煤矿智能巡检机器人:推动煤矿行业变革的关键力量

目前我国煤炭资源总量达到了2078.85亿吨&#xff0c;已探明储量为1432亿吨&#xff0c;煤矿能源现阶段还是我国重要的基础能源。而煤矿生产作业存在巨大危险&#xff0c;主要包括高温、高压、燃爆和有毒气体等环境因素&#xff0c;同时机械设备运转过程中潜藏着重大风险。这些危…

MySQL中的Bin-log是什么?有什么作用?

Bin-log日志也被称之为二进制日志&#xff0c;作用与Redo-log类似&#xff0c;主要是记录所有对数据库表结构变更和表数据修改的操作&#xff0c;对于select、show这类读操作并不会记录。bin-log是MySQL-Server级别的日志&#xff0c;所有引擎都能用的日志&#xff0c;而redo-l…

DataStructure.包装类简单认识泛型

包装类&简单认识泛型 【本节目标】1 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱 2 什么是泛型3 引出泛型3.1 语法 4 泛型类的使用4.1 语法4.2 示例4.3 类型推导(Type Inference) 5. 裸类型(Raw Type) &#xff08;了解&#xff09;5.1 说明…

第十一章: 粒子系统与后期处理(二)

11.5 使用 EffectComposer 实现后期效果 Three.js 提供了 EffectComposer 来方便地实现后期处理效果。 11.5.1 安装后期处理库 首先&#xff0c;通过 npm 安装 three 的后期处理库&#xff1a; npm install three11.5.2 基本设置 接下来&#xff0c;我们需要在项目中引入 …

MyCAT 2 底层原理

MyCAT 2 底层原理 1. MyCAT 2 架构概述 MyCAT 2 是一款开源的数据库中间件&#xff0c;它通过分库分表、读写分离、动态路由等机制提升数据库系统的性能和扩展性。MyCAT 2 的架构设计灵活&#xff0c;适用于多种数据库类型&#xff0c;包括 MySQL、PostgreSQL 和 SQL Server …

tensorflow学习:错误 InternalError: Dst tensor is not initialized

tensorflow学习&#xff1a;错误 InternalError: Dst tensor is not initialized_dst tensor is not initialized.-CSDN博客https://blog.csdn.net/wanglitao588/article/details/77033659

多元化功能空间,打造影像产业生态圈

国际数字影像产业园的多元化功能空间定位涵盖了从产业实训、研发创新、资产交易、集群发展到孵化服务、大数据支持、产学研合作以及人力资源服务等多个方面&#xff0c;旨在为数字影像产业提供全方位的支持和服务&#xff0c;推动产业的升级和发展。 1、产业实训空间&#xff1…

开发一款直播APP完整指南

直播是一种强大的营销工具&#xff0c;可以让企业与观众进行真实的互动。 根据Grand View Research发布的预测&#xff0c;直播行业规模将从 2021 年的 700 亿美元增长到 2028 年的近 2240 亿美元&#xff0c;七年内增长三倍。 区块链技术和人工智能等技术进步将在未来几年提…

网络协议TCP/IP, HTTP/HTTPS介绍

TCP/IP协议 TCP/IP是一种基于连接的通信协议&#xff0c;它是互联网的基础协议。TCP代表传输控制协议&#xff0c;IP代表Internet协议。虽然这两个协议通常一起提及&#xff0c;但它们实际上是分开的&#xff1a;IP负责在网络中从一台计算机向另一台计算机发送数据包&#xff0…

深度学习21-30

1.池化层作用&#xff08;筛选、过滤、压缩&#xff09; h和w变为原来的1/2&#xff0c;64是特征图个数保持不变。 每个位置把最大的数字取出来 用滑动窗口把最大的数值拿出来&#xff0c;把44变成22 2.卷积神经网络 &#xff08;1&#xff09;conv&#xff1a;卷积进行特征…

圈复杂度.

圈复杂度是衡量代码的重要标准 配置&#xff1a; eslint里面&#xff1a;rules&#xff1a;complexity&#xff1a;[error,10]