集合(未完。。。)

集合

  • 例题引入
  • 1.java集合引入
  • 2.为什么要使用集合?
  • 3.List、Set、Queue和Map的区别
  • 4.List
    • List——ArrayList
      • (!!实用!!)ArrayList常用方法
    • List——Vector
    • List——LinkedList
  • 5.Set
  • 6.Map
    • HashMap
    • HashSet
    • entrySet
  • 参考文档

最近总遇到要用 Map 的题
这里写一下我的学习笔记
主要参考来自github–JavaGuide项目(超超超超超级推荐!!!)
(文章最后会附上链接)

例题引入

在这里插入图片描述

  • 参考代码
import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        HashSet<Map<Double,Double>> lines = new HashSet<>();
        List<Map<Integer,Integer>> list = new ArrayList<>();

        for (int i = 0; i < 20; i++) {
            for (int j = 0; j < 21; j++) {
                Map<Integer,Integer> map = new HashMap<>();
                map.put(i,j);
                list.add(map);
            }
        }

        //得到两个直线点
        double x1=0,x2=0,y1=0,y2=0;
        for (int i = 0; i < list.size(); i++) {
            for (int j = i+1; j < list.size(); j++) {
                for (Map.Entry<Integer, Integer> entry : list.get(i).entrySet()) {
                    x1 = entry.getKey();
                    y1 = entry.getValue();
                }
                for (Map.Entry<Integer, Integer> entry : list.get(j).entrySet()) {
                    x2 = entry.getKey();
                    y2 = entry.getValue();
                }

                if (x1 == x2 || y1 == y2) {
                    continue;
                }

                double k = (y2 - y1) / (x2 - x1);
                double b = (x2 * y1 - x1 * y2) / (x2 - x1);
                Map<Double, Double> temp = new HashMap<>();
                temp.put(k, b);
                lines.add(temp);
            }
        }
        System.out.println(lines.size()+20+21);
    }
}

基于这段代码,开启这篇文章

1.java集合引入

java集合,也叫做容器,主要是由两大接口派生而来:
Collection接口,用于存放单一元素;
Map集合,主要存放键值对。

对于Collection接口,下面又有三个主要的子接口:List、Set和Queue

  • java集合框架(概览)如下:
    在这里插入图片描述

2.为什么要使用集合?

当我们需要存储一组类型相同的数据时,数组是最常用且最基本的容器之一。但是,使用数组存储对象存在一些不足之处,因为在实际开发中,存储的数据类型多种多样且数量不确定。这时,Java
集合就派上用场了。与数组相比,Java 集合提供了更灵活、更有效的方法来存储多个数据对象。Java
集合框架中的各种集合类和接口可以存储不同类型和数量的对象,同时还具有多样化的操作方式。相较于数组,Java
集合的优势在于它们的大小可变、支持泛型、具有内建算法等。总的来说,Java
集合提高了数据的存储和处理灵活性,可以更好地适应现代软件开发中多样化的数据需求,并支持高质量的代码编写。

3.List、Set、Queue和Map的区别

简单的说:

  • List:有顺序
  • Set:元素不可重复
  • Queue:排队
  • Map:用key来搜索value
  • List:存储的元素都是有序的、可重复的
  • Set:存储的元素不可重复
  • Queue:按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的
  • Map:使用键值对(key-value)存储,类似于数学上的函数y=f(x),“x”代表key,“y”代表value。key是无序的、不可重复的;value是无序的、可重复的,每个键最多映射到一个值。

4.List

  • ArrayList
  • Vector
  • LinkedList

List——ArrayList

- ArrayList的底层是数组队列,相当于动态数组。
- 与java中的数组相比,它的容量能动态增长。
- 在添加大量元素前,应用程序可以使用ensureCapacity操作来添加ArrayList实例的容量
  • ArrayList 继承于AbstractList,实现了List,RandomAccess,Cloneable,java.io.Serializable这些接口。

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable{

  }

  • ArrayList实现的功能也和这些接口有关
    • List:表明它是一个列表,支持添加、删除、查找等操作,并且可以通过下标进行访问
    • RandomAccess:这是一个标志接口,表明实现这个接口的List集合是支持快速随机访问的。在ArrayList中,我们既可以通过元素的序号快速获取元素对象,这就是快速随机访问。
    • Cloneable:表明它具有拷贝能力,可以进行深拷贝或浅拷贝操作。
    • Serializable:表明它可以进行序列化操作,也就是可以将对象转换为字节流进行持久化存储或网络传输。

(!!实用!!)ArrayList常用方法

  • add(E element):将指定元素添加到列表的末尾
	ArrayList<Integer> list = new ArrayList<Integer>();
	list.add(123);
	list.add(45);
	list.add(666);
	System.out.println(list);	//output:[123, 45, 666]

	ArrayList<String> s = new ArrayList<String>();
	s.add("hfies");
	s.add("jeif");
	s.add("fose");
	System.out.println(s);	//output:[hfies, jeif, fose]
  • add(int index,E element):在指定位置插入指定元素
	list.add(2, 9999);
	System.out.println(list);	//output:[123, 45, 9999, 666]
  • get(int index):返回指定位置的元素
	System.out.println(list.get(2));	//output:9999
	//也可用于循环输出
	for(int i=0;i<list.size();i++) {
		System.out.print(list.get(i)+" ");	//output:123 45 9999 666
	}
  • set(int index,R element):替换指定位置的元素
	list.set(2, 8888);
	System.out.println(list);//output:[123, 45, 8888, 666]
  • remove(int index):移除指定位置的元素
	list.remove(2);
	System.out.println(list);//output:[123, 45, 666]
  • size():返回列表中的元素数目
	System.out.println(list.size());//output:3
  • clear():清空列表中的所有元素
	list.clear();
	System.out.println(list);//output:[]
  • contains(Object o):判断列表是否包含指定元素
	System.out.println(list.contains(666));//output:true
  • indexOf(Object o):返回指定元素在列表中第一次出现的位置
	System.out.println(list.indexOf(45));//output:1
  • isEmpty():判断列表是否为空
	System.out.println(list.isEmpty());//output:false
  • clone():复制数组
	Object o = list.clone();
	System.out.println(o);//output:[123, 45, 666]
  • 全部代码:
import java.util.*;;

public class Main{
	public static void main(String[] args) {
		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(123);
		list.add(45);
		list.add(666);
		System.out.println(list);	//output:[123, 45, 666]
		
		ArrayList<String> s = new ArrayList<String>();
		s.add("hfies");
		s.add("jeif");
		s.add("fose");
		System.out.println(s);	//output:[hfies, jeif, fose]
		
		list.add(2, 9999);
		System.out.println(list);	//output:[123, 45, 9999, 666]
		
		System.out.println(list.get(2));	//output:9999
		for(int i=0;i<list.size();i++) {
			System.out.print(list.get(i)+" ");	//output:123 45 9999 666
		}
		System.out.println();
		
		list.set(2, 8888);
		System.out.println(list);//output:[123, 45, 8888, 666]
		
		list.remove(2);
		System.out.println(list);//output:[123, 45, 666]

		System.out.println(list.size());//output:3
		
		System.out.println(list.contains(666));//output:true
		
		System.out.println(list.indexOf(45));//output:1
		
		System.out.println(list.isEmpty());//output:false
		
		Object o = list.clone();
		System.out.println(o);//output:[123, 45, 666]
		
		list.clear();
		System.out.println(list);//output:[]
	}
}

//output:
在这里插入图片描述

List——Vector

List——LinkedList

这两个我还没用到过,用到会来补充

5.Set

HashSet:无序,唯一
TreeSet:有序,唯一
LinkedHashSet

  • HashSet:基于HashMap实现的,底层采用HashMap来保存元素。
  • LinkedHashSetLinkedHashSetHashSet的子类,并且其内部是通过LinkedHashMap来实现的。
  • TreeSet:红黑树(自平衡的排序二叉树)

6.Map

HashMap

  • map.put()
	Map<Integer,String> map = new HashMap<>();
	map.put(1, "1a");
	map.put(2, "2a");
	map.put(3, "3a");
	System.out.println(map);	//output:{1=1a, 2=2a, 3=3a}


	//当给map中添加元素,会返回key对应的原来的value值;若key没有对应的值,返回null
	System.out.println(map.put(1, "5"));	//output:1a
	System.out.println(map);	//output:{1=5, 2=2a, 3=3a}
  • map.get()
	//根据指定的key获取对应的value
	String s = map.get(2);
	System.out.println(s);	//output:2a
  • map.remove()
	//根据key删除元素,会返回key对应的value值
	String value = map.remove(2);
	System.out.println(value);	//output:2a
	System.out.println(map);	//output:{1=5, 3=3a}

HashSet

HashSet是基于HashMap来实现的,实现了Set接口,同时还实现了序列化和可克隆化。
而集合Set是不允许有重复值的。
所以HashSet是一个没有重复元素的集合但不保证集合的迭代顺序(所以,随着时间改变,元素的顺序可能会改变)
由于HashSet是基于HashMap来实现的,所以允许空值不是线程安全

  • HashSet是基于HashMap实现的,区别就在于HashMap中输入一个键值对,而在HashSet中只输入一个值。

  • 构建HashSet

HashSet<E> hs = new HashSet<E>();
//也可以写成
Set<E> hs = new HashSet<E>();
  • add():因为HashSet不会存在重复元素,所以相同的元素不会存进去
  • 常用方法:
    在这里插入图片描述

entrySet

entrySet就是用来遍历map的一种方法

entrySet是java中键值对的集合,Set里面的类型是Map.Entry,一般可以通过map.entrySet()得到。

  • entrySet实现了Set接口,里面存放的是键值对
Set<Map.Entry<String,String>> entryseSet = map.entrySet();

for(Map.Entry<String,String> entry:entryseSet){
	System.out.println(entry.getKey)+","+entry.getValue()):
}

参考文档

  • java笔记–Map的用法
  • Java中哈希集(HashSet)概念,实现以及操作

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CTFshow 电子取证】套的签到题

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

Spring 源码调试问题 ( List.of(“bin“, “build“, “out“); )

Spring 源码调试问题 文章目录 Spring 源码调试问题一、问题描述二、解决方案 一、问题描述 错误&#xff1a;springframework\buildSrc\src\main\java\org\springframework\build\CheckstyleConventions.java:68: 错误: 找不到符号 List<String> buildFolders List.of…

【C++】常对象

目录 常对象常对象特点常数据成员常成员函数对象的常引用 常对象 把对象定义为常对象&#xff0c;对象中的数据成员就是常变量&#xff0c;在定义时必须带实参&#xff08;或者有缺省构造函数&#xff09;作为数据成员的初值。 const Person p1(3,4);//定义了一个常对象常对象特…

202452读书笔记|《永安梦》——错过前世 般配 换取今生 奉陪 任波谲云诡 共安危 共进退

今年追的第一本剧同名小说&#xff0c;《永安梦》改编自剧《长安第一美人》。本来是冲着徐正溪去看的&#xff0c;被娜娜、孙坚、夏楠路转粉了&#xff0c;只限这个剧。名字跟我有一个字一样诶。妆造&#xff0c;姿态&#xff0c;男女主&#xff0c;男二女二配角都不错。 因为看…

DRAGIN:利用LLM的即时信息需求进行动态RAG 论文解读

论文地址:https://arxiv.org/pdf/2403.10081.pdf DRAGIN 是一种新型的检索增强生成框架,专门为大型语言模型(LLMs)设计,以满足其在文本生成过程中的实时信息需求。该框架旨在解决传统检索增强生成(RAG)方法在动态性和准确性方面的局限性,特别是在处理复杂、多步骤或长文…

如何将Maven与TestNG集成

我们已经讨论了如何在maven中执行单元测试用例&#xff0c;但那些是JUnit测试用例&#xff0c;而不是TestNG。当maven使用“mvn test”命令进入测试阶段时&#xff0c;这些用例被执行。 本文将介绍如何将Maven与TestNG集成&#xff0c;并在maven进入测试阶段时执行TestNG测试。…

leetcode刷题日记-缺失的第一个正数(困难)

题目描述 解题思路 题目的意思十分容易理解&#xff0c;但是确实思考出来这种解题的方法还是比较难的。首先能想到的点就是[1,N]这个范围&#xff0c;因为只有N个数字&#xff0c;最小的数字只能在这个区间和N1两种可能。但是有时间复杂度的限制&#xff0c;我们该怎么找。我们…

【STM32F103】1-WireDS18B20(含ESP8266代码)

1-Wire 单总线 1-Wire是一种串行通信总线协议&#xff0c;由美国芯片制造商Dallas Semiconductor&#xff08;现为Maxim Integrated&#xff09;开发。这种协议主要用于连接和通信各种设备&#xff0c;并在多个领域得到了广泛应用&#xff0c;如温度传感器、电池管理、智能卡等…

测试用例设计方法-场景法详解

01 定义 场景法是通过运用场景来对系统的功能点或业务流程的描述&#xff0c;从而提高测试效果的一种方法。 场景法一般包含基本流和备用流&#xff0c;从一个流程开始&#xff0c;通过描述经过的路径来确定的过程&#xff0c;经过遍历所有的基本流和备用流来完成整个场景。 …

NO12 蓝桥杯单片机之DS1302的使用

1 DS1302是什么 DS1302由两块存储器组成&#xff0c;一个是日历时钟寄存器还有一个是31位的静态RAM存储器。 而在蓝桥杯中常考的就是日历时钟寄存器&#xff0c;故这里只介绍日历时钟寄存器。简单来说&#xff0c;其就是一个“电子表”&#xff0c;他会自动的实时记录时间&am…

简易挛生分拣系统设计

1 工效组合展示 2 方案规划设计 3 数字挛生建模 基础建模、动画设计、模型导出 4 软件体系架构 5 Web交互设计 5.1 页面架构 5.2 初始构造 5.3 模型运用 5.4 WS通信 5.5 运行展现 6 服务支撑编码 6.1 整体调度 6.2 WS服务 6.3 C/S通信 7 系统级调试完善

了解一下npm i的流程与原理

流程 执行npm install&#xff0c;先判断有无lock文件。 1、没有lock文件。会先根据依赖构建出扁平的依赖关系决定下哪些包。新版本的依赖关系是扁平化的&#xff0c;老版本是树结构&#xff0c;可能会出现依赖重复安装的问题&#xff0c;老版本示意图如下&#xff1a; 作为前…

【探索Linux】—— 强大的命令行工具 P.31(守护进程)

阅读导航 引言一、守护进程简介1. 概念2. 特点 二、用C创建守护进程⭕代码✅主要步骤 温馨提示 引言 当谈到计算机系统中运行的特殊进程时&#xff0c;守护进程&#xff08;daemon&#xff09;无疑是一个备受关注的话题。作为在后台默默运行并提供各种服务的进程&#xff0c;守…

【机器人】UIUC、北大、亚马逊提出基于动作的场景图,让机器人理解和操控未知环境

论文的主要内容是通过机器人操作的交互式探索&#xff0c;构建一个基于动作的场景图&#xff08;Action-Conditioned Scene Graph&#xff0c;简称ACSG&#xff09;来帮助机器人更好地理解和操作未知环境。 全文核心&#xff1a;在未知环境中如何让机器人自主探索并完成复杂任务…

乐维更改IP地址

1.1 系统IP调整 vim /etc/sysconfig/network-scripts/ifcfg-ens1921.2 Web相关服务IP变更 1.2.1 编辑/itops/nginx/html/lwjkapp/.env文件,更改ZABBIXSERVER、ZABBIXRPCURL、DB_HOST中的IP 1.2.2 进入/itops/nginx/html/lwjk_app/目录下,执行php bin/manager process-conso…

记录C++中,vector的迭代器在push_back以后扩容导致迭代器失效的问题

前言 vector是我们用到最多的数据结构&#xff0c;其底层数据结构是单端动态数组&#xff0c;由于数组的特点&#xff0c;vector也具有以下特性&#xff1a; ①O(1)时间的快速访问&#xff1b; ②顺序存储&#xff0c;所以插入到非尾结点位置所需时间复杂度为O(n)&#xff0c;删…

JDK21|史诗级的更新,虚拟线程

作者:鱼仔 博客首页: https://codeease.top 公众号:Java鱼仔 前言 要想看官方对于JDK21的更新说明&#xff0c;可以直接跳转到下面这个官方网站中 官网地址为&#xff1a;https://openjdk.org/projects/jdk/21/ JDK21是最新的LTS版本&#xff0c;里面添加了不少新的特性&…

中小型集群部署,Docker Swarm(集群)使用及部署应用介绍

1、Docker Swarm简介 说到集群&#xff0c;第一个想到的就是k8s&#xff0c;但docker官方也提供了集群和编排解决方案&#xff0c;它允许你将多个 Docker 主机连接在一起&#xff0c;形成一个“群集”&#xff08;Swarm&#xff09;&#xff0c;并可以在这个 Swarm 上运行和管…

【Web APIs】DOM节点

目录 1.节点操作 1.1DOM节点 1.2查找节点 1.2.1父节点查找 1.2.2子节点查找 1.2.3兄弟节点查找 1.3增加节点 1.4克隆节点 1.5删除节点 2.时间对象 2.1实例化 2.2时间对象方法 2.3时间戳 3.重绘和回流 1.节点操作 1.1DOM节点 DOM节点&#xff1a;DOM树中的每一个…

BaseDao封装增删改查

文章目录 什么是BaseDao操作代码增删改查询单个数据查询多个数据 总结 什么是BaseDao BaseDao是&#xff1a; 数据库里负责增加&#xff0c;删除&#xff0c;修改&#xff0c;查询 具体来说是一种接口代码,公共方法的接口类。 在dao层新建basedao,其他dao层接口继承basedao 相…