Java集合学习

2023-05-16

Java集合图的详解

在这里插入图片描述

Java集合详解

第一部分

  1. Collection(继承了Iteratable接口)和Map,是集合框架的根接口
  2. 集合类存放于java.util包中。集合类存放的都是对象的引用,而非对象本身。通俗地说,集合就是一 个存放数据对象引用的容器
  3. 集合类型主要有三种:set(集)、list(列表)和 map(映射)常用的集合类实现了在系统中定义的 三大 接口,分别为:java.util.Set接口、java.util.List接口和java.util.Map接口。其中List 和Set 接口继承自Collection接口。
  4. Set集合中的对象不按特定方式排序,只是简单地把对象加入集合中。同时,Set集合中不能有重复对 象, List集合的主要特征是其对象以线性方式存储,集合中可以存放重复对象,Map是一种把键对象和值对 象映射的集合,它的每一个元素都包含一对键对象和值对象。

第二部分

  • 迭代器Iterator接口有三个主要方法:
	public interface Iterator<E> {
    	boolean hasNext();
    	E next();
   		void remove();
	}
  • 迭代器的使用方法:
	Collection<String> c = new ArrayList<>();
	Iterator<String> iter = c.iterator();
	while(iter.hasNext()){
  		String str = iter.next();
  		System.out.println(str);
	}
  • 也可以使用增强for循环进行遍历:
	for(String str : c){
  		System.out.println(str);
	}
  • Iterator 的 remove 方法会删除上次调用 next 方法返回的元素,每次调用 remove 之前,必须调用 next 方法。下面是如何删除集合中第一个元素的方法:
	Iterator<String> iter = c.iterator();
	iter.next();
	it.remove();

第三部分

  • Collection的子接口
    • Set:接口—实现类:HashSet、LinkedHashSet
    • Set的子接口SortedSet接口—实现类:TreeSet
    • List:接口—实现类:LinkedList,Vector,ArrayList

各集合的使用

List集合

  • 有序列表,允许存放重复的元素
  • 实现类
    • ArrayList:数组实现,查询快,增删慢,轻量级;(线程不安全)
    • LinkedList:双向链表实现,增删快,查询慢(线程不安全)
    • Vector:数组实现,重量级(线程安全,使用少)
  • List常用方法:
  - void add(int index, Object element) :添加对象element到位置index上
  - boolean addAll(int index, Collection collection) :在index位置后添加容器collection中所 有的元素
  - Object get(int index) :取出下标为index的位置的元素
  - int indexOf(Object element) :查找对象element 在List中第一次出现的位置
  - int lastIndexOf(Object element) :查找对象element 在List中最后出现的位置
  - Object remove(int index) :删除index位置上的元素
  - ListIterator listIterator(int startIndex) :返回一个ListIterator 跌代器,开始位置为startIndex
  - List subList(int fromIndex, int toIndex) :返回一个子列表List ,元素存放为从 fromIndex 到toIndex之前的一个元素
  • ArrayList集合类实现了List接口,每个ArrayList实例都有一个容量,当元素添加到ArrayList集合,它的容量自动增加。ArrayList集合允许添加所有类型,包括null。
  • 下面介绍一下ArrayList类的常用方法。
    • public int size():返回此列表中元素的数目。
    • public boolean isEmpty():如果此列表不包含元素,返回true。
    • public E get(int index):返回此列表中指定位置的元素。
    • public E set(int index,E element):用指定元素替换此列表中指定位置的元素。
    • public boolean add(E e):将指定的元素插入到列表的末尾。
    • public E remove(int index):移除此列表中指定位置的元素,所有后续元素左移(下标1)。

Set集合

  • 扩展了Collection接口,无序集合,不允许存放重复的元素;允许使用null元素,对add()、equals()和hashCode()方法添加了限制。
  • 实现类
  • HashSet:equals返回true,hashCode返回相同的整数;哈希表;存储的数据是无序的。
  • LinkedHashSet:此实现与HashSet的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。
  • HshiSet常用方法:
 - public boolean contains(Object o) :如果set包含指定元素,返回true
 - public Iterator iterator()返回set中元素的迭代器
 - public Object[] toArray() :返回包含set中所有元素的数组public Object[] toArray(Object[]返回包含set中所有元素的数组,返回数组的运行时类型是指定数组的运行时类型
 - public boolean add(Object o) :如果set中不存在指定元素,则向set加入
 - public boolean remove(Object o) :如果set中存在指定元素,则从set中删除
 - public boolean removeAll(Collection c) :如果set包含指定集合,则从set中删除指定集合的所有元素
 - public boolean containsAll(Collection c) :如果set包含指定集合的所有元素,返回true。如果指定集合也是一个set,只有是当前set的子集时,方法返回true

Map集合

  • 集合框架的第二类接口树。
  • 它提供了一组键值的映射。其中存储的每个对象都有一个相应的关键字(key),关键字决定了对象在Map中的存储位置。
  • 关键字应该是唯一的,每个key 只能映射一个value。
  • 实现类:
  • HashMap、TreeMap、LinkedHashMap、Hashtable等
  • HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放;允许null的键或值;
  • Hashtable:线程安全的,不允许null的键或值;
  • Properties::key和value都是String类型,用来读配置文件;
  • TreeMap:对key排好序的Map; key 就是TreeSet, value对应每个key; key要实现Comparable接口或TreeMap有自己的构造器;
  • LinkedHashMap: 此实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。
  • Map常用方法:
 - Object put(Object key,Object value):用来存放一个键-值对Map中
 - Object remove(Object key):根据key(键),移除键-值对,并将值返回
 - void putAll(Map mapping) :将另外一个Map中的元素存入当前的Map中
 - void clear() :清空当前Map中的元素
 - Object get(Object key) :根据key(键)取得对应的值
 - boolean containsKey(Object key) :判断Map中是否存在某键(key)
 - boolean containsValue(Object value):判断Map中是否存在某值(value)
 - public Set keySet() :返回所有的键(key),并使用Set容器存放
 - public Collection values() :返回所有的值(Value),并使用Collection存放
 - public Set entrySet() :返回一个实现 Map.Entry 接口的元素 Set
  • HashMap集合类是基于哈希表的Map接口的实现,这种实现提供了所有可选的Map操作,并允许null值和null键。下面介绍一下HashMap类的常用方法。
  • public int size():返回HashMap集合中的键值映射的数目。
  • public boolean isEmpty():如果这个HashMap不包含键值映射则返回true,否则返回false。
  • public V get(Object key):返回指定的键映射的值,如果这个HashMap不包含此键,则返回null。
  • public V put(K key,V value):将指定值与此映射中的指定键关联。如果映射以前包含一个键的映射,旧值将被替换。
  • public V remove(Object key):从HashMap集合中移除指定的键映射。

集合遍历方法

  • 增强for循环 for(Obj o:c){syso(o)}
  • 使用iterator , Iterator it=c.iterator;
  • while(it.hasNext()){Object o = it.next()}
  • 普通循环:for(Iterator it=c.iterator();it.hasNext()😉{it.next() }

Map集合遍历方法

  • Map集合遍历的四种方式理解和简单使用
  • Map集合是键值对形式存储值的,所以遍历Map集合无非就是获取键和值,根据实际需求,进行获取键和值
  • 方法一
  • 通过map.keySet()获取到值,然后根据键获取到值
	for(String s:map.keySet()){
		System.out.println("key : "+s+" value : "+map.get(s));
	}
  • 方法二
  • 通过Map.Entry(String,String) 获取,然后使用entry.getKey()获取到键,通过entry.getValue()获 取到值
	for(Map.Entry<String, String> entry : map.entrySet()){
    	System.out.println("键 key :"+entry.getKey()+" 值value :"+entry.getValue());
    }
  • 总结
  • 不同需求下Map集合的获取
    • 首先定义Map集合
	HashMap<Integer, String> map = new HashMap<>();
	map.put(1, "one");
	map.put(2, "two");
	map.put(3, "three");
	map.put(4, "four");
	map.put(5, "five");
  • 遍历
  • 要求一:只需获取所有的key,最佳方案如下:
        //获取所有的key
        for (Integer key : map.keySet()) {
            Log.e(TAG, "key-------------: " + String.valueOf(key));
        }

  • 要求二:只需获取所有的value,最佳方案如下:
    //获取所有的value
    for (String value : map.values()) {
        Log.e(TAG, "value-----------: " + value);
    }

  • 要求三:当同时需要key和value时,最佳方案如下:通过Map.entrySet遍历key和value
    for (Map.Entry<Integer, String> entry : map.entrySet()) {
    	System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
    }

数组的使用

  • 方式一 数组类型[] 数组名={数值0,数值1,数值2,数值3,…};
    String[] str1 = {"数值0","数值1","数值2","..."};

  • 方式二 数组类型[] 数组名;数组名=new 数组类型[]{数值0,数值1,数值2,…};
    String[] str2; str2 = new String[]{"数值0","数值1","数值2","..."};

  • 方式三 数组类型[] 数组名;数组名=new 数组类型[数组长度];
    String[] str3 ; str3 = new String[6];

  • 注意:声明数组的时候,也可以将[]放在数组名后面,其格式如下数据类型 数组名[];

  • 数组的相关方法

    • 数组的拷贝其格式为:System.arrcopy(源数组名,起始索引,目标数组名,起始索引,拷贝数组元素个数)。
      例如:int A[] = {1,2,3}和int B[] = {4,5,6},则System.arrcopy(A,0,B,0,2)
    • 数组的排序其格式为:Arrays.sort(数组名),使用该方法可让数组元素按从小到大的顺序排列。
    • 获取数组长度其格式为:数组名.length。

集合类的使用

  • 利用Collections对集合进行排序。java.util.Collections是一个包装类,它包含有各种有关集合操作的静态多态方法,这些方法的参数和返回值都是集合。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
  • 本例通过Collections包装类的sort(List list)方法对ArrayList集合进行升序排序。
    Collections.sort(list);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java集合学习 的相关文章

  • 在 spring-boot 中设置 base-href 和 context-path - Angular 6 应用程序

    我正在构建一个 Web 应用程序 其中 UI 客户端组件是使用 Angular 6 构建的 后端 服务器端 位于 Spring boot 上 申请预计可在 http localhost 8080 FUtility 我通过在 appmodul
  • 在 portlet 中设置 SearchContainer 以使用 EL 和 JSTL 在 JSP 中使用它

    我正在尝试使用SearchContainer在我的liferay应用程序中 目前我必须使用 JSP Scriplets 来设置results in
  • 有没有更简单的方法来分割/重建字符串?

    目前我正在使用String split 像这样 String tmp props get i getFullName split String name for int j 1 j lt tmp length j if j gt 1 nam
  • Spring安全+LocaleResolver

    我需要在身份验证成功后更改区域设置 区域设置解析器
  • 如何在JavaFX中有效地滚动和缩放大图像?

    作为图像处理应用程序的一部分 我需要创建具有缩放 滚动和矢量叠加功能的简单查看器模块 图像相当大 40000x20000 这使得 ImageView 上的操作变慢 缓冲等 在 JavaFX 中处理巨大图像时 改善用户体验的最佳选项是什么 我
  • 像 Google Play 商店一样在垂直 RecyclerView 中动态不同图像水平 RecyclerView

    我一直在关注这个教程 http android pratap blogspot co za 2015 12 horizo ntal recyclerview in vertical html http android pratap blog
  • 查找所有数组的长度多维数组,Java

    我想使用多维数组来存储数据网格 但是 我还没有找到一种简单的方法来查找长度2nd数组的一部分 例如 boolean array new boolean 3 5 System out println array length 只会输出3 是否
  • 如何将日期字符串解析为Date? [复制]

    这个问题在这里已经有答案了 如何将下面的日期字符串解析为Date object String target Thu Sep 28 20 29 30 JST 2000 DateFormat df new SimpleDateFormat E
  • NIO 直接缓冲区何时以及如何被释放?

    我有一个 C 库 需要一个临时缓冲区作为暂存空间 我正在考虑将直接字节缓冲区的地址传递给它 在最终释放缓冲区之前 是否允许虚拟机重新定位缓冲区 JNI 框架消失后 本机库将保留该指针 我的理解是 JNI 本地对象引用无法缓存 因为 VM 可
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • 自 JRE 1.7.0_25 起,Batik 无法进行转换

    自从我更新到 JAVA 1 7 0 25 以来 蜡染在应用转换时会抛出异常 堆栈跟踪是 java awt image ImagingOpException Unable to transform src image at java awt
  • 不使用 length() 方法的字符串长度[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在不使用字符串的情况下找到字符串的长度length String类的方法 str toCharArray length应该管用 或者怎么
  • java中永远不会出现的异常

    我为点和向量编写一个类 我想用它们来计算向量的点和范数 这些是点类和向量类 public class Point public float x y public class MyVector public Point start end 我
  • Jersey 和 Spring 中的全局异常处理?

    我正在使用 Jersey 和 Spring 3 2 以及 Open CMIS 开发 RESTful Web 服务 我没有使用 Spring 的 MVC 模式 它只是 Spring IOC 和 Jersey SpringServlet 控制器
  • SQlite 获取最近的位置(带有纬度和经度)

    我的 SQLite 数据库中存储有纬度和经度的数据 我想获取距我输入的参数最近的位置 例如我当前的位置 纬度 经度等 我知道这在 MySQL 中是可能的 并且我已经做了相当多的研究 SQLite 需要一个自定义外部函数来实现半正弦公式 计算
  • 短 2 个字节

    我正在从串行端口读取一个长度为 133 字节的数据包 最后 2 个字节包含 CRC 值 我使用 Java 将 2 个字节值制成单个 我认为很短 这就是我所做的 short high 48 0x00ff short low 80 short
  • Web 服务客户端的 AXIS 与 JAX-WS

    我决定用Java 实现Web 服务客户端 我已经在 Eclipse 中生成了 Axis 客户端 并使用 wsimport 生成了 JAS WS 客户端 两种解决方案都有效 现在我必须选择一种来继续 在选择其中之一之前我应该 考虑什么 JAX
  • 在Java内存管理中,“PS”代表什么?

    每当我看到 Java 中对内存的引用时 各种空格总是以 PS 为前缀 PS 是什么意思 它开始困扰我 到目前为止我唯一的猜测是 泳池空间 但这将是多余的 例子 PS伊甸园空间 PS 幸存者空间 PS 终身空间 老一代 PS Perm Gen
  • Eclipse 如何创建一个未解决编译问题的类?

    当我尝试使用 javac 编译此类时 出现编译错误并且未创建 Test class public class Test public static void main String args int x 1L lt this cannot
  • Android - 从渲染线程内结束活动

    下午好 我不熟悉 android 中的活动生命周期 并且一直在尽可能地阅读 但我不知道如何以良好的方式解决以下问题 我有一个使用 GLSurfaceView 的活动来在屏幕上绘制各种内容 在这个 GLSurfaceView 的渲染线程中 我

随机推荐

  • NT_STATUS_ACCESS_DENIED listing \*

    在centos8上配了个SAMBA与windows共享文件 访问共享目录出现 NT STATUS ACCESS DENIED listing xff0c smb gt span class token operator span span
  • RocketMQ发送普通消息的所有方法以及代码示例

    RocketMQ发送普通消息的所有方法以及代码示例 一 使用RocketMQTemplate发送消息 xff08 整合Springboot xff09 xff08 1 xff09 void send Message lt gt messag
  • C语言总结day01

    day01 1 C语言标识符 C语言标识符需满足以下条件 只能由英文字母 26个英文字母 xff0c 包括大小写即共52个 数字 0 9 和下划线组成长度为1 32必须以英文字母或下划线开头 2 C语言风格 C语言严格区分英文字母的大小写C
  • C语言总结day02

    day02 1 运算符 算术运算符 单目运算符 xff1a 43 正 xff1b 负 xff1b 双目运算符 xff1a 这三个同级 gt 43 这两个同级 注意 xff1a 前边三个的优先级大于后边的两个 xff1b 双目运算符两边运算数
  • C语言总结day03

    day03 1 数据的输入输出 数据的输出 xff1a 从计算机向输出设备 如显示器 打印机等 输出数据称为输出 数据的输入 xff1a 从输入设备 如键盘 磁盘 光盘 扫描仪等 向计算机输入数据称为输入 C语言函数库中有一批 34 标准输
  • C语言总结day04

    day04 1 int a n 是错误的 C语言中不允许对数组的大小作动态定义 2 字符数组的初始化 char a 61 I am Student char a 10 利用for语句对每个进行初始化 3 字符数组的输入和输出输入 char
  • C语言总结day06

    day06 1 定义和使用结构体变量 C语言允许用户建立由不同类型数据组成的组合型的数据结构 xff0c 它称为结构体 声明格式 struct 结构体名 成员列表 定义结构体类型变量 struct 结构体名 结构体变量 在声明类型的同时定义
  • C语言总结day07

    day07 一些概念理解 1 为什么使用指针 每一个编程语言都使用指针C 43 43 将指针暴露给了 用户 xff08 程序员 xff09 xff0c 而java和C 等语言则将指针隐蔽起来了 2 指针和引用的区别 本质 xff1a 引用是
  • C语言总结day05

    day05 1 函数间可以相互调用 xff0c 但是不能调用main函数 xff0c main函数是被操作系统调用的 2 数组作为函数参数 数组元素可以作函数参数 值传递 注意 xff1a 数组元素可以用作函数实参 xff0c 不能用作形参
  • SSM-Spring入门

    Spring学习 1 Spring简介 Spring是什么 Spring是分层的Java SE EE应用full stack轻量级开源框架 xff0c 是以loC Inverse Of Contorl 反转控制 和AOP Aspect Or
  • SSM-Spring学习(二)

    Spring IoC和DI注解开发 Spring配置数据源 数据源 xff08 连接池 xff09 介绍 xff1a 数据库连接池概念 百度百科 xff1a 数据库连接池负责分配 管理和释放数据库连接 xff0c 它允许应用程序重复使用一个
  • SSM-Spring(三)-AOP

    简介 什么是 AOP AOP 为 span class token class name Aspect span span class token class name Oriented span span class token clas
  • RocetMQ发送顺序消息的所有方法以及代码示例

    RocetMQ发送顺序消息的所有方法以及代码示例 一 使用RocketMQTemplate发送顺序消息 xff08 1 xff09 SendResult syncSendOrderly String destination Message
  • Spring(四)---Spring Jdbc Template基本使用

    1 概述 JdbcTemplate是spring框架中提供的一个对象 xff0c 是对原始繁琐的Jdbc API对象的简单封装 spring框架 为我们提供了很多的操作模板类 例如 xff1a 操作关系型数据的JdbcTemplate和Hi
  • SpringMVC(一)------快速入门

    Spring与Web环境集成 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext spring配置文件 方式获取的 xff0c 但是每次从容器中获
  • SpringMVC(二)-----SpringMVC的请求和响应

    SpringMVC的数据响应 SpringMVC的数据响应 数据响应方式 理解 页面跳转 直接返回字符串通过ModelAndView对象返回 回写数据 直接返回字符串返回对象或集合 SpringMVC的数据响应 页面跳转 返回字符串形式 x
  • SpringMVC(三)------SpringMVC的文件上传

    SpringMVC的请求 文件上传 客户端表单实现 应用 文件上传客户端表单需要满足 xff1a 表单项type 61 file 表单的提交方式是post表单的enctype属性是多部分表单形式 xff0c 及enctype 61 mult
  • Keil 安装

    Keil v5 C51和MDK共存 准备工具 C51版本 Keil xff08 如C51v959 xff09 MDK版本 xff08 如MDK525 xff09 激活工具 keil keygen 需要的Pack包 Keil STM32F1x
  • Kubernetes安装

    使用kubeadm创建集群 基础环境 一台兼容的 Linux 主机 Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令每台机器 2 GB 或更多的 RAM
  • Java集合学习

    Java集合图的详解 Java集合详解 第一部分 Collection xff08 继承了Iteratable接口 xff09 和Map xff0c 是集合框架的根接口集合类存放于java util包中 集合类存放的都是对象的引用 xff0