java list set map日子记录

List集合

概念

是一个容器,作用为存放多个数据,通常用来替代数组

特点

  1. 只能存放引用类型

  2. 所有集合都来自于java.util包

List , Set , Map都是接口

List的存储特点

有序,有下标,元素可以重复

List的常用实现类

  1. ArrayList (常用)

    • JDK1.2 底层数组实现 查询快,增删慢 线程不安全,效率高

  2. LinkedList

    • JDK1.2 底层链表实现 查询慢,增删快 线程不安全,效率高

  3. Vector

    • JDK1.0 底层数组实现 都慢 线程安全,效率低

创建

  • 建议使用多态

List 集合名=new 实现类();

常用方法

  • 集合名.方法名(实参列表)

  1. boolean add(元素): 往集合末尾添加一个元素

  2. void add(下标, 元素): 将元素添加至指定下标位置

  3. boolean addAll(集合名):将指定集合元素添加至当前集合末尾

  4. boolean addAll(下标,集合名):将指定集合元素添加至当前集合指定下标位置

  5. int size():获取集合长度

  6. 元素 get(下标):获取指定下标位置的元素

    • 下标不可超出使用范围,否则报出下标越界异常

  7. boolean contains(元素):判断是否包含指定元素

  8. boolean containsAll(集合名):判断当前集合中是否包含指定集合的所有元素

  9. 下标 indexOf(元素):获取指定元素第一次出现的下标

  10. 下标 lastIndexOf(元素):获取指定元素最后一次出现的下标

  11. boolean isEmpty():判断集合元素是否为空,不可判比null值

  12. 被删除的元素 remove(下标):删除指定下标位置的元素

  13. boolean remove(元素):删除指定元素

    • 如果集合元素为整数值,则会优先认定值为下标。所以删除整数值元素时只能通过下标删除

  14. 旧元素 set(下标,新元素):将指定下标位置的值替换为新元素值

  15. Object[] toArray():将集合转换为数组

遍历

  1. 下标遍历

for(int i=0;i<集合名.size();i++){//通过集合名.get(i)的方式获取当前元素
}List list = new ArrayList();list.add(10);list.add(20);list.add(30);list.add(40);list.add(50);//下标遍历for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i)+" ");}System.out.println();

迭代器遍历

  1. 获取集合的迭代器:集合名.iterator()

  2. 操作迭代器:

    • boolean hasNext():判断是否存在下一元素

    • 元素 next():使指针后移一位,获取下一元素

  3. 使用:

    • 迭代过程中不可增删元素

    • 一次迭代只能调用一次next方法,否则迭代与操作元素数量不一致

//获取迭代器Iterator it = list.iterator();//利用循环操作迭代器while(it.hasNext()){Object o = it.next();if (o != null) {System.out.print(o+"  ");}}System.out.println();外遍历forEach
for(数据类型 元素名:集合名){//元素名就代表正在被遍历的元素
}for (Object o : list) {System.out.print(o+"  ");}System.out.println();1. - 遍历过程中无法增删元素- JDK5.02. 自遍历forEach- JDK8.0- 集合名.forEach(Consumer接口实现类对象)list.forEach(new Consumer() {@Overridepublic void accept(Object o) {//参数o就表示当前元素System.out.print(o+"  ");}});System.out.println();//自遍历forEach-lambdalist.forEach(o -> System.out.print(o + "  "));
## 泛型- 用于集合: 约束集合可存放的数据类型## 泛型- 用于集合: 约束集合可存放的数据类型~~~java
List<泛型类型> 集合名=new 实现类名<泛型类型>();
~~~### 使用1. 存放类型为基本类型时,需要将泛型类型声明为对应包装类型2. 前后泛型声明必须一致3. 前边泛型不可省略4. 后边泛型<>内容可省~~~javaList<泛型类型> 集合名=new 实现类名<>();~~~~~~java
package com.by.test;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;public class Test4 {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(10);list.add(20);list.add(30);list.add(40);list.add(50);/* list.add(5.5);list.add("abc");*///四种遍历方式//下标遍历for (int i = 0; i < list.size(); i++) {//接收当前元素Integer n = list.get(i);System.out.print(n+"  ");}System.out.println();//迭代器遍历Iterator<Integer> it = list.iterator();while (it.hasNext()) {Integer n = it.next();System.out.print(n+"  ");}System.out.println();//外遍历for (Integer i : list) {System.out.print(i+"  ");}System.out.println();//自遍历list.forEach(new Consumer<Integer>() {@Overridepublic void accept(Integer i) {System.out.print(i+"  ");}});System.out.println();//lambdalist.forEach(i-> System.out.print(i+"  "));}
}
~~~

Set集合

Collection

  • 是List和Set的父接口

  • 所有集合都是由Collection或者Map派生

特点

  1. 内部存放List和Set的共性方法

  2. 没有直接实现类

Set的存储特点

无序,无下标,元素不可重复

Set的常用实现类

  1. HashSet

    • JDK1.2 底层哈希表(数组+链表)实现 线程不安全,效率高

  2. LinkedHashSet

    • JDK1.2 使HashSet的子类,底层哈希表实现 线程不安全,效率高

  3. TreeSet

    • JDK1.2 底层红黑树实现,是SortedSet的实现类 线程不安全,效率高

    红黑树:树状结构存放数据,使用的是二分查找法,特点为查询效率快

创建

  • 建议使用多态

Set<泛型> 集合名=new 实现类名<>();

常用方法

  • 所有方法都继承自Collection,无独有方法

遍历

  1. 迭代器遍历

  2. 外遍历forEach

  3. 自遍历forEach

哈希表的去重原理

  1. 先调用元素的hashCode方法获取哈希码值

  2. 通过哈希码值%数组长度(16)得到存放下标

  3. 如果下标位置未存有元素,则直接存放

  4. 如果下标位置存有元素, 则调用当前元素的equals方法与下标位置元素进行值的比较

  5. 都不相同, 在下标位置上继续链表存放

  6. 有相同,则舍弃添加当前元素

使用

  1. HashSet和LinkedHashSet如果存放的是自定义类型,则必须重写hashCode和equals方法才能实现去重

  2. LinkedHashSet可以保证元素存入与取出的顺序一致

  3. TreeSet可以实现对元素进行默认的升序排序

    • 如果TreeSet中存放的是自定义类型,则必须自定义排序规则

    • 排序方式:

      1. 实现Comparable接口,重写CompareTo方法

        • 思路:让当前对象this和参数对象o进行比较

        • 实现:对谁排序,就让谁实现

        • 规则:

          • 从小到大:

            this的值>o的值,返回正数

            this的值<o的值,返回负数

          • 从大到小:

            this的值>o的值,返回负数

            this的值<o的值,返回正数

            相等返回0

package com.by.entity;public class Student implements Comparable<Student>{private String name;private int age;private double score;//省略getter、setter、构造@Overridepublic int compareTo(Student o) {//根据学生成绩从高到底排序if (this.score > o.score) {return -1;} else if (this.score < o.score) {return 1;}return 0;}
}实现Comparator接口,重写compare方法- 思路: 让参数o1和o2进行比较
- 实现:在集合创建处的小括号内传入实现类对象Set<Student> set = new TreeSet<>((o1,o2)->{//根据学生成绩从低到高if (o1.getScore() > o2.getScore()) {return 1;} else if (o1.getScore() < o2.getScore()) {return -1;}return 0;});1. - > 1. 默认识别Comparable,但是Comparator优先级更高> 2. Comparator更能保护类的单一职责,有利于后期代码的维护, 集合排序扩展性更高,更推荐该方式2. TreeSet去重规则:当compareTo或compare方 法返回值为0时去重

Map集合

存储特点

  • 以键值对的形式存储数据

  • 键(key): 无序,无下标,元素不可重复

  • 值(value): 无序,无下标,元素可以重复

常用实现类

  1. HashMap

    • JDK1.2 底层哈希表实现 线程不安全,效率高

  2. LinkedHashMap

    • JDK1.2 是HashMap的子类,底层哈希表实现 线程不安全,效率高

  3. TreeMap

    • JDK1.2 是SortedMap的实现类,底层红黑树实现 线程不安全,效率高

  4. Hashtable

    • JDK1.0 底层哈希表实现 线程安全,效率低

  5. Properties

    • JDK1.0 是Hashtable的子类,底层哈希表实现 线程安全,效率低

创建

  • 建议使用多态

Map<键的泛型,值的泛型> 集合名=new 实现类名<>();

常用方法

K: 键

V: 值

  1. V put(K,V):向集合中添加一个键值对

    • 如果键已经存在,则进行值的覆盖

  2. int size(): 获取集合长度

  3. boolean containsKey(K): 判断集合是否包含指定键

  4. boolean containsValue(V): 判断集合是否包含指定值

  5. V get(K): 根据键获取值

## 遍历1. 键遍历- Set<K的泛型> keySet(): 获取集合所有的键放入Set集合返回~~~java
//先获取所有的键Set<String> set1 = map.keySet();//遍历键set1.forEach(k -> System.out.println(k + "  " + map.get(k)));
~~~2. 值遍历- Collection<V的泛型> values(): 获取集合所有的值放入Collection集合返回~~~java
//获取所有的值Collection<String> coll = map.values();//遍历值for (String s : coll) {System.out.println(s);}
~~~3. 键值对遍历- Set<  Map.Entry<K的泛型,V的泛型> >  entrySet(): 将所有的键值对对象放入Set集合返回- entry对象.getKey(): 获取entry对象中的键- entry对象.getValue():获取entry对象中的值~~~java
//获取到所有的entry对象Set<Map.Entry<String, String>> set2 = map.entrySet();//遍历entry对象set2.forEach(entry-> System.out.println(entry.getKey()+","+entry.getValue()));
~~~4. 自遍历forEach- 集合名.forEach(BiConsumer接口实现类对象)~~~java
System.out.println("自遍历-->匿名内部类:");map.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String k, String v) {System.out.println(k+"  ,  "+v);}});System.out.println("自遍历-->lambda:");map.forEach((k,v)->System.out.println(k+"  ,  "+v));
~~~

使用

  1. 除去TreeMap之外, 如果键为自定义类型,则必须重写hashCode和equals方法才能实现去重

  2. HashMap可以存放null值,键只能有一个null,值可以存在多个null

  3. LinkedHashMap在HashMap的基础上可以保证元素存入和取出的顺序一致

  4. TreeMap可以根据键进行默认的升序排序

    • 如果键为自定义类型,则需要自定义排序规则,方式与TreeSet一致

    • 键不可为null,否则排序会导致空指针

    • 仍然在compareTo或者compare方法返回值为0时去重

  5. Hashtable无法存放null值

  6. Properties只能存放String类型的数据

    • 不推荐使用多态

    • 无法使用泛型

    • setProperty(String,String): 向集合中添加一个键值对

    • String getProperty(String): 根据键获取值

    • load(输入流): 通过输入流将配置文件的内容读取到集合中

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

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

相关文章

计算机毕业设计java+springboot+vue的旅游攻略平台

项目介绍 本系统结合计算机系统的结构、概念、模型、原理、方法&#xff0c;在计算机各种优势的情况下&#xff0c;采用JAVA语言&#xff0c;结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。员工管理系统主要包括个人中心、用户管理、攻略管理、审核信息管理、积分…

STM32Cube +VSCode开发环境搭建

STM32Cube VSCode开发环境搭建 0.前言一、各种方式对比1.STM32CubeMX CLion2.STM32CubeIDE VSCode STM32 VSCode Extension3.VSCode EIDE插件 二、STM32CubeIDE VSCode STM32 VSCode Extension环境搭建1.需要安装的软件2.相关配置3.编译测试 三、总结 0.前言 工欲善其事&…

解决:openpyxl.utils.exceptions.IllegalCharacterError

使用python写excel遇到非法字符&#xff0c;本来用的是openpyxl发现有报错&#xff0c;查了一下xlsxwriter可以自动处理非法字符&#xff0c;写起来更方便。 注意使用前安装xlsxwriter: pip install xlsxwriterimport pandas as pddef write_to_xlsx(data, filename):# 表头he…

最新Next14 路由处理器 Route Handlers

四、使用Next路由处理程序 Next.js Route Handlers I. Next中路由处理程序是什么 ​ 路由处理程序是在用户访问站点路由时执行的功能。它们负责处理对定义的URL或路由的传入HTTP请求&#xff0c;以生成所需的数据。从本质上讲&#xff0c;当用户访问Next.js应用程序中的特定页…

vim手册(vim cheatsheet)

vim手册&#xff08;vim cheatsheet&#xff09; 1. 命令模式 1). 移动光标 在命令模式下&#xff0c;可以使用以下命令来移动光标&#xff1a; - h&#xff1a;向左移动一个字符。 - j&#xff1a;向下移动一行。 - k&#xff1a;向上移动一行。 - l&#xff1a;向右移动一个…

Docker 从构建开始导出一个镜像

docker build docker build命令用于从Dockerfile创建一个镜像。它的基本格式如下&#xff1a; docker build [OPTIONS] PATH | URL | -这里的PATH是Dockerfile所在的路径&#xff0c;URL是一个Git仓库地址&#xff0c;-表示从标准输入读取Dockerfile。 docker build命令的一…

chatglm3-6b部署及微调

chatglm3-6b部署及微调 modelscope: https://modelscope.cn/models/ZhipuAI/chatglm3-6b/filesgithub: https://github.com/THUDM/ChatGLM3镜像: ubuntu20.04-cuda11.8.0-py38-torch2.0.1-tf2.13.0-1.9.4v100 16G现存 单卡 安装 软件依赖 pip install --upgrade pippip ins…

使用IDEA让文本对比不在变的困难

文章目录 前言操作1、IDEA与电脑磁盘任意文件的比较2、项目内部的文件比较3、剪切板比较4、IDEA本地历史比较5、IDEA版本历史对比 前言 在日常实际开发当中我们常常会对一些代码或内容进行比对查看是否有差异&#xff0c;这个时候不需要借用第三方比对插件&#xff0c;在IDEA中…

2022 icpc杭州站 C. No Bug No Game - 背包dp

题面 分析 能拿整个 p i p_i pi​的就拿整个的&#xff0c;不能拿了可以拿一部分的&#xff0c;因此可以分成0和1两种情况&#xff0c;0表示拿整个的&#xff0c;1表示还可以拿部分的&#xff0c;两种情况放在一起做一遍01背包&#xff0c;找到最大价值。 代码 #include &l…

git笔记

git常见命令 git init :初始化本地仓库&#xff0c;会生成一个.git文件&#xff0c;该文件用于管理和追踪该本地仓库&#xff0c;只有在git仓库下的文件才能被管理! git config user. name "用户名” git config user. email " 邮箱” git config -1 :列出当前git仓库…

老李测评:网络电视盒子哪个好?双十一必看电视盒子推荐

大家好&#xff0c;我是测评人老李&#xff0c;双十一大促期间我们都在买买买&#xff0c;本期老李要分享的数码产品推荐是电视盒子&#xff0c;为了推荐更客观&#xff0c;老李购入了各平台热销的十几款电视盒子&#xff0c;通过两周的对比后&#xff0c;整理了这份电视盒子推…

java后端debug排查问题思路

问题排查思路 这里说的是主要是debug以及线上问题排查的思路. 解决问题的步骤 确认环境、确定问题、复现问题、查看日志、定位问题 、解决问题 确认环境/url/参数 确认是哪个环境。 是开发环境&#xff0c;测试环境&#xff0c;还是生产环境。 如果问题是在测试环境&…

class类默认导出,header字段在请求中的位置

这是封装好的&#xff0c;没封装的如下 如果没有用uni.post那么就是如下的结构 let header {Content-Type: application/x-www-form-urlencoded,tenant: MDAwMA, } request({url:/sal/formula/validFormula,method:post,data:{},header })

音乐免费下载mp3格式+音频格式转换+剪辑音频+合并音频教程

1.在qq音乐网页版搜索想要的歌曲 qq音乐网站&#xff1a;https://y.qq.com/ 如果你是vip可以直接下载vip的歌曲&#xff0c;如果不是选择不是vip的歌曲进行第一步的操作 2.点击播放进入页面后F12拿到音频地址 然后双击src里面的音频地址复制 网页新标签打开赋值的这个链接&a…

iptables 放开http典型配置

要在 iptables 中放开 HTTP&#xff08;端口80&#xff09;的典型配置&#xff0c;您需要执行以下步骤&#xff1a; 检查当前的 iptables 规则&#xff1a; 首先&#xff0c;您可以使用以下命令查看当前的 iptables 规则&#xff0c;以确保没有冲突的规则&#xff1a; sudo ipt…

Gitlab服务器配置LDAP指导

ssh登录gitlab服务器&#xff1a;192.168.1.203修改配置文件 sudo su vim /etc/gitlab/gitlab.rb找到ldap_enabled和ldap_servers关键字并修改参数 保存配置文件并重新载入配置 gitlab-ctl reconfigure检查ldap相关配置是否成功&#xff08;列出前100个用户&#xff0c;若没…

BIM、建筑机器人、隧道工程施工关键技术

一、BIM简介 &#xff08;一&#xff09;BIM概念 BIM&#xff08;Building Information Modeling&#xff09;&#xff0c;建筑信息模型。该技术通过数字化手段&#xff0c;在计算机中建立虚拟建筑&#xff0c;该虚拟建筑提供从单一到完整、包含逻辑关系的建筑信息库。信息库…

福建地区等保测评怎么做

福建地区等保测评怎么做&#xff1f;福建地区等保测评是指在福建地区对网络安全等级保护进行评估的过程。网络安全已经成为现代社会一个重要的议题&#xff0c;各个行业和领域都面临着越来越多的网络安全风险和威胁。为了保护信息系统的安全性和可靠性&#xff0c;各地区都制定…

基于全阶模型磁链观测器的异步电机矢量控制的学习

导读&#xff1a;异步电机直接矢量控制需要通过磁链观测器来获取同步角&#xff0c;用于控制过程中的坐标变换。同时&#xff0c;磁链观测器输出的估计磁链用于磁链PI调节器闭环控制。所以磁链观测器在矢量控制中显得尤为重要。 如果需要文章中对应的仿真模型&#xff0c;关注…

C语言实现输出9*9口诀

完整代码&#xff1a; // 输出9*9口诀 #include<stdio.h>int main(){//i代表九行for (int i 1; i < 10; i){//j代表每行有几列for (int j 1; j <i; j){printf("%d*%d%d ",j,i,i*j);}printf("\n");}return 0; } 运行截图&#xff1a;