Java集合随笔

news2024/11/26 10:49:12

这里写自定义目录标题

    • 好文链接
    • 常见的方法
    • Collections类
    • Comparator接口
    • HashMap 的长度为什么是 2 的幂次方?
    • 讲解链接

在这里插入图片描述

Collection部分:

  1. Set部分:
  • HashSet:底层数据结构是哈希表,线程不安全,无序,不可重复。
  • LinkedHashSet:底层数据结构是哈希表和链表,线程不安全,有序,不可重复。
  • SortedSet:底层数据结构可以是红黑树或跳表,线程不安全,有序,不可重复。
  • TreeSet:底层数据结构是红黑树,线程不安全,有序,不可重复。
  1. List部分:
  • ArrayList:底层数据结构是数组,线程不安全,有序,可重复。
  • LinkedList:底层数据结构是双向链表,线程不安全,有序,可重复。
  • Vector:底层数据结构是数组,线程安全,有序,可重复。
  • Stack:底层数据结构是数组,线程安全,有序,可重复。
  1. Queue部分:
  • PriorityQueue:底层数据结构是堆,线程不安全,无序,可重复。
  • Deque:底层数据结构可以是数组或双向链表,线程不安全,有序,可重复。

Map部分:

  • HashMap:底层数据结构是哈希表,线程不安全,无序,key不可重复。
  • LinkedHashMap:底层数据结构是哈希表和链表,线程不安全,有序,key不可重复。
  • HashTable:底层数据结构是哈希表,线程安全,无序,key不可重复。
  • SortedMap:底层数据结构可以是红黑树或跳表,线程不安全,有序,key不可重复。
  • TreeMap:底层数据结构是红黑树,线程不安全,有序,key不可重复。

好文链接

常见的方法

  1. List接口的方法:
  • add(E element):将指定元素添加到列表的末尾。
  • remove(int index):移除指定位置的元素。
  • get(int index):返回指定位置的元素。
  • size():返回列表的大小。
  • contains(Object o):判断列表是否包含指定元素。
  • indexOf(Object o):返回指定元素在列表中的索引。
  1. Set接口的方法:
  • add(E element):将指定元素添加到集合中。
  • remove(Object o):从集合中移除指定元素。
  • contains(Object o):判断集合是否包含指定元素。
  • size():返回集合的大小。
  1. Map接口的方法:
  • put(K key, V value):将指定的键值对添加到映射中。
  • remove(Object key):从映射中移除指定键对应的键值对。
  • get(Object key):返回指定键对应的值。
  • containsKey(Object key):判断映射是否包含指定键。
  • containsValue(Object value):判断映射是否包含指定值。
  1. Queue接口的方法:
  • offer(E element):将指定元素添加到队列的末尾。
  • poll():移除并返回队列的头部元素。
  • peek():返回队列的头部元素,但不移除。
  1. Stack类的方法:
  • push(E item):将指定元素压入栈。
  • pop():移除并返回栈顶元素。
  • peek():返回栈顶元素,但不移除。

Collections类

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CollectionExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(5);
        numbers.add(3);
        numbers.add(9);
        numbers.add(1);
        numbers.add(7);

        // 排序
        Collections.sort(numbers);
        System.out.println("升序排序后的列表:" + numbers);

        // 反转
        Collections.reverse(numbers);
        System.out.println("反转后的列表:" + numbers);

        // 随机打乱
        Collections.shuffle(numbers);
        System.out.println("随机打乱后的列表:" + numbers);

        // 查找元素
        int index = Collections.binarySearch(numbers, 7);
        System.out.println("元素7的位置索引:" + index);

        // 替换元素
        Collections.replaceAll(numbers, 3, 10);
        System.out.println("将元素3替换为10后的列表:" + numbers);
    }
}

输出结果:

升序排序后的列表:[1, 3, 5, 7, 9]
反转后的列表:[9, 7, 5, 3, 1]
随机打乱后的列表:[7, 1, 5, 9, 3]
元素7的位置索引:0
将元素3替换为10后的列表:[7, 1, 5, 9, 10]

Comparator接口

  • 如果我们对一个类自带的自然排序不满意,又不能修改其源代码的情况下,可以使用Comparator来实现自定义排序。
  • Comparator是一个接口,它定义了用于比较两个对象的方法。我们可以创建一个实现了Comparator接口的类,然后在该类中实现compare()方法来定义我们自己的比较规则。

下面是一个使用Comparator进行自定义排序的示例代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class CustomSortingExample {
    public static void main(String[] args) {
        List<Person> personList = new ArrayList<>();
        
        personList.add(new Person("Alice", 25));
        personList.add(new Person("Bob", 20));
        personList.add(new Person("Charlie", 30));
        
        // 使用Comparator进行自定义排序
        Collections.sort(personList, new Comparator<Person>() {
            @Override
            public int compare(Person p1, Person p2) {
                // 根据年龄升序排序
                return p1.getAge() - p2.getAge();
            }
        });
        
        // 输出排序后的结果
        for (Person person : personList) {
            System.out.println(person.getName() + " - " + person.getAge());
        }
    }
}

class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
}

HashMap 的长度为什么是 2 的幂次方?

讲解链接

  • 设计一个算法来计算一个数除以2的幂次方的余数,可以使用位运算来实现。

具体步骤如下:

  1. 将要计算的数转换为二进制表示。
  2. 将2的幂次方减1转换为二进制表示。
  3. 对这两个二进制数进行按位与操作。
  4. 将结果转换为十进制表示,即为所求的余数。

例如,计算13除以8的余数:

  1. 13的二进制表示为1101。
  2. 8-1的二进制表示为111。
  3. 进行按位与操作得到101。
  4. 将101转换为十进制表示,结果为5。

这样就得到了13除以8的余数为5。

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

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

相关文章

【ArcGIS Pro二次开发】(68):计算面要素的四至点

这个工具的目的是计算面要素的四至点。 四至点并不是要素的MaxX,MaxY,MinX,MinY四个值。如果要计算这四个字&#xff0c;可以直接使用系统自带的【计算几何属性】进行计算&#xff1a; 这里要计算的是要素的最东、西、南、北的四个点坐标。 因此首先要获取这四个点&#xff0c…

vue3 - 基于ts的时间转换处理的time utils

GitHub Demo 地址 在线预览 时间转换处理的工具类 timeUtils.ts // 时间转换工具类const TimeUtils {Jh_getTimeStamp,Jh_timeStampToTime,Jh_convertTimeStamp,Jh_timeStampToYMD,Jh_isToday,Jh_getYearMonth,Jh_getPrevYear,Jh_getNextYear,Jh_getPrevYearMonth,Jh_getNex…

VSCode快速设置heder和main函数

快速设置header: 点击左侧的齿轮&#xff0c;选择User Snippets&#xff1a; 在出现的选择框中输入python&#xff0c;选择python.json 在最外层的{ }内部添加以下内容 "HEADER": {"prefix": "header","body": ["# -*- encoding:…

【运维知识高级篇】超详细的Jenkins教程3(Maven项目上线全流程)

上篇文章给大家介绍了Maven编译的内容&#xff0c;讲解了用Jenkins如何去集成Maven&#xff0c;这篇文章给大家介绍另一个的Maven项目&#xff0c;实现gitlab提交代码后&#xff0c;自动进行Maven编译&#xff0c;自动推送至web主机进行代码上线的效果。 文章目录 一、主机介绍…

【操作系统笔记八】任务调度信号处理CPU上下文

任务调度 何时需要调度执行一个任务&#xff1f; 第一&#xff1a;当任务创建的时候&#xff0c;需要决定是继续执行父进程&#xff0c;还是调度执行子进程 第二&#xff1a;在一个任务退出时&#xff0c;需要做出调度决策&#xff0c;需要从 TASK_RUNNING 状态的所有任务中选…

IDEA 2019 Springboot 3.1.3 运行异常

项目场景&#xff1a; 在IDEA 2019 中集成Springboot 3.1.3 框架&#xff0c;运行异常。 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSch…

Linux ❀ 进程出现process information unavailable时的消除方法

[rootmaster ~]# jps 74963 -- process information unavailable 78678 Jps [rootmaster ~]# cd /tmp/hsperfdata_redhat/ # redhat为启动该java进程的用户ps -ef | grep $pid查找 [rootmaster hsperfdata_redhat]# ll total 32 -rw------- 1 redhat redhat 32768 Sep 27 15:…

GaussDB数据库SQL系列-游标管理

目录 一、前言 二、概述&#xff08;GaussDB&#xff09; 1、游标概述 2、游标的使用分类 三、GaussDB中的显式游标&#xff08;示例&#xff09; 1、显式游标的使用与操作步骤 2、显式游标示例 四、GaussDB中的隐式游标&#xff08;示例&#xff09; 1、隐式游标简介…

python+requests接口自动化测试框架实例详解

前段时间由于公司测试方向的转型&#xff0c;由原来的web页面功能测试转变成接口测试&#xff0c;之前大多都是手工进行&#xff0c;利用postman和jmeter进行的接口测试&#xff0c;后来&#xff0c;组内有人讲原先web自动化的测试框架移驾成接口的自动化框架&#xff0c;使用的…

通讯网关软件015——利用CommGate X2MQTT实现MQTT访问Modbus RTU

本文介绍利用CommGate X2MQTT实现MQTT访问Modbus RTU。CommGate X2MQTT是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;SCADA系统上位机、PLC、设备具备Modbus RTU通讯接口&#xff0c;现在…

缓存雪崩、缓存击穿、缓存穿透

缓存雪崩 当缓存中大量的键值对同时过期或者Redis宕机了&#xff0c;大量的请求就会直接打到数据库&#xff0c;这种现象就是缓存雪崩 应对策略 有四种&#xff0c;分别是“均匀设置过期时间”、“互斥锁”、“双key策略”、“设置逻辑过期时间&#xff0c;异步更新缓存” …

WiFi产品认证通常需要准备哪些材料

我们做WiFi产品&#xff0c;都需要做一些认证。比方说FCC、CE、SRRC等认证。 认证需要准备很多材料。通常WiFi产品的认证需要准备的材料如下&#xff1a; 认证需要准备材料

解决使用flex布局引起的变形问题

只需在变形的样式中加以下代码&#xff0c;禁止拉伸就ok了 flex-shrink: 0;

【技巧】Ubuntu临时授予用户sudo权限,并在一定时间后自动撤销

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 目录 背景说明 开始操作 at指令 背景说明 有时候普通用户需要使用sudo来执行一些操作&#xff0c;作为服务器管理员&#xff0c;需要盯着该用户使用完后再给他撤销sudo权限。当用户多起来的时候&#xff0c;这…

游戏设计模式专栏(一):工厂方法模式

引言 大家好&#xff0c;我是亿元程序员&#xff0c;一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》&#xff0c;让糟糕的代码在潜移默化中升华&#xff0c;欢迎大家关注分享收藏订阅。 在游戏开发中&#xff0c;代码的组织和结构对于项目的可…

Centos 7 部署SVN服务器

一、安装SVN 1、安装Subversion sudo yum -y install subversion2、验证是否安装成功&#xff08;查看svn版本号&#xff09; svnserve --version二、创建版本库 1、先建立目录&#xff0c;目录位置可修改 mkdir -p /var/svn cd /var/svn2、创建版本库&#xff0c;添加权限…

web前端tips:js继承——寄生式继承

上篇文章给大家分享了 js继承中的 原型式继承 web前端tips&#xff1a;js继承——原型式继承 今天给大家分享一下 js 继承中的 寄生式继承 寄生式继承 寄生式继承&#xff08;Parasitic Inheritance&#xff09;是一种基于原型式的继承方式&#xff0c;它通过创建一个仅用于…

电气专业发展到头了?

今日话题 电气专业发展到头了&#xff1f; 电气绝对不是末路专业。但是有个前提&#xff0c;不要选错行业。大土木类的&#xff0c;不管是设计还是施工&#xff0c;都不要选择。 二、电网公司。电网是绕不开的话题&#xff0c;早些年电网待遇太好&#xff0c;搞得大家都理所…

最优化问题简介

最优化问题&#xff08;也称优化问题&#xff09;泛指定量决策问题&#xff0c;主要关心如何对有限 资源进行有效分配和控制&#xff0c;并达到某种意义上的最优&#xff0e;它通常需要对需求进 行定性和定量分析&#xff0c;建立恰当的数学模型来描述该问题&#xff0c;设计合…

SI3262:国产NFC+MCU+防水触摸按键三合一SoC芯片

目录 SI3262简介特点结构框图芯片特性 SI3262简介 Si3262是高度集成ACD低功耗MCUNFC15通道防水触摸按键的SoC芯片。 其MCU模块具有低功耗、Low Pin Count、宽电压工作范围&#xff0c;集成了13/14/15/16位精度的ADC、LVD、UART、SPI、I2C、TIMER、WUP、IWDG、RTC、TSC等丰富的…