5.javaSE基础__集合(List+Set+Map实现类)

\1. 抽象类和接口的区别

  1. 抽象类的需要abstract修饰,内部方法可以是抽象的也可以是不抽象的
  2. 接口: 可以看成抽象类,但不是类,方法没有方法体(1.8之前),由实现类实现具体方法功能

\1. 什么是异常

程序运行时出现的错误

\1. 异常的分类

  1. Error
  2. Exception
    • RunTimeException: 除0,空指针,数字类型不匹配
    • 非RunTimeException: 找不到文件 FileNotExceptiojn

\1. 常见的异常有哪些

\1. try…catch…finally里每个模块分别做什么

  • try : 监控代码,由jvm抛出异常
  • catch: 接受异常
  • finally: 善后处理,必须要走的一步

\1. throw和throws的区别

  • tthrow: 抛出异常类型指向对象
  • throws: 异常指向类

文章目录

  • 一.集合
      • 1.体系结构
  • 二.List接口
      • 1.ArrayList
      • 2.LinkedList
      • 3.Vector
      • 4.泛型generics
      • 5.迭代器Iterator
    • 三.LinkedList接口
      • 1.定义:
      • 2.特点:
      • 2.常用方法
    • 四.Vetor类
    • 五.集合排序
      • 1.Comparable
      • 2.使用Comparator匿名内部类
      • 3.使用List接口自带的sort()方法
    • 六.List的contains()方法去重
  • 三.Set接口
      • 1.特征:
      • 2.分类:
    • **一).HashSet类**
      • 1.方法:
      • 2.HashSet去重
    • 二).TreeSet类
      • 1.特点:
    • 三).LinkedHashSet类
  • 四.Map接口
    • 一).定义
      • 1.Map集合的特点
      • 2.分类
      • 3.常用方法:
    • 二).HashMap实现类
      • 1.HashMap存储结构(扩展)----了解即可
        • 1、**JDK1.8之前HashMap存在的问题?**
      • 2.底层结构---了解
    • 三).TreeMap实现类

一.集合

1.体系结构

Collection

  1. List

    有序可重复,允许插入Boolean值,null值

    • ArrayList
    • LinkedList
    • Vertor
  2. Set

    无序不可重复

  3. Map

二.List接口

继承Collecting接口,允许出现重复元素,元素存入顺序和取出顺序一致

1.ArrayList

基于数组实现的类,动态增减数组的大小

//默认存储object对象,任何元素都可存放(null,boolean....)
ArrayList<Object>  arrayList = new ArrayList<>();

特点: 插入和删除慢,访问块,线程不安全,不适用多线程;

  1. 常用方法:

    void add(int index, Object element):在指定位置index上添加元素element
    boolean addAll(int index, Collection c):将集合c的所有元素添加到指定位置index
    Object get(int index):返回List中指定位置的元素
    int indexOf(Object o):返回第一个出现元素o的位置,否则返回-1
    int lastIndexOf(Object o) :返回最后一个出现元素o的位置,否则返回-1
    Object remove(int index)删除指定位置上的元素
    Object set(int index, Object element)用元素element取代位置index上的元素,并且返回旧的元素
  2. 扩容

    创建大的新数组,将原所有元素赋值进去

    • 当添加元素后,size 大小已经等于或超过了数组的容量 capacity 时,就会触发扩容操作。
    • 扩容的大小默认情况下为原数组大小的一半。比如原数组大小为 10,那么扩容后的数组大小为 15。(1.5倍扩容)
    • 如果扩容后的大小还是不够,那么就以添加元素的数量作为扩容大小,即新数组的大小为 oldCapacity + (oldCapacity >> 1) + 1。

2.LinkedList

基于链表实现的类

特点: 插入和删除快,访问慢,线程不安全,不适用多线程;

3.Vector

特点: 访问和插入快,支持同步操作,适用于多线程环境;效率比ArrayList低,不推荐单线程环境下使用

4.泛型generics

编译时数据类型的安全检测机制,数据类型被指定为一个参数,数据类型要一致;

        TreeSet<Integer> treeSet = new TreeSet<>();//数据类型Integer,传递参数类型一致为IntegertreeSet.add(1);treeSet.add(5);treeSet.add(2);treeSet.add(4);treeSet.add(5);treeSet.add("aa");//报错:ClassCastException

5.迭代器Iterator

一个对象,可遍历对象

Java中的Iterator功能比较简单,只能单向移动:

  • 使用方法iterator()要求容器返回一个Iterator。
  • 第一次调用Iterator的next()方法时,它返回序列的第一个元素。
  • 使用next()获得序列中的下一个元素。
  • 使用hasNext()检查序列中是否还有元素。
  • 使用remove()将迭代器所指向的集合删除元素。
        Iterator<Employee> iterator = list.iterator();while (iterator.hasNext()) {//判断元素是否存在System.out.println(iterator.next());//存在则输出所有Employee对象}

三.LinkedList接口

1.定义:

双向链表结构,方便插入和删除元素,不支持快速访问

2.特点:

  • LinkedList没有实现RandomAccess接口,因此LinkedList不支持随机访问
  • LinkedList的任意位置插入和删除元素时效率比较高,时间复杂度为O(1)
  • LinkedList比较适合任意位置插入的场景

2.常用方法

方法说明
public void addFirst(E e)将指定元素插入集合的开头
public void addLast(E e)将指定元素插入集合的结尾
public E getFirst()返回集合第一个元素
public E getLast()返回集合最后一个元素
public E removeFirst()移除并返回集合的第一个元素
public E removeLast()移除并返回最后一个元素
public E pop()从集合所表示的堆栈中弹出一个元素
public void push(E e)将元素推入集合所表示的堆栈中
public boolean isEmpty()判断集合是否为空

四.Vetor类

五.集合排序

1.Comparable

  1. 实体类实现Comparable接口
  2. 重写compareTo()方法
  3. Collections.sort()排序//默认升序
//实体类Employee实现`Comparable`接口
public class Employee implements Comparable{
............
@Overridepublic int compareTo(Employee o) {return this.getAge() - o.getAge();}
}

compareTo()方法,该方法的返回值0代表相等,1表示大于,-1表示小于;

2.使用Comparator匿名内部类

public static void main(String[] args) {ArrayList<Employee> list = new ArrayList<>();list.add(new Employee("arran", 23,123));list.add(new Employee("arran", 22,3243));list.add(new Employee("arran", 22,3123));list.add(new Employee("arran", 26,435));
//        while (iterator.hasNext()) {
//            System.out.println(iterator.next());
//        }
//        });//匿名内部类list.sort(new Comparator<Employee>() {@Overridepublic int compare(Employee o1, Employee o2) {return o1.getAge()-o2.getAge();}});//迭代器遍历对象Iterator<Employee> iterator = list.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}
  • 倒序

    //参数颠倒下位置    
    public int compare(Employee o1, Employee o2) {return o2.getAge()-o1.getAge();}
    

3.使用List接口自带的sort()方法

//        Collections.sort(list, new Comparator<Employee>() {
//            @Override
//            public int compare(Employee o1, Employee o2) {
//                int result=o1.getAge()-o2.getAge();
//                if (result==0) {
//                    result=(int)(o1.getSalary()-o2.getSalary());
//                }
//                return result;
//            }

六.List的contains()方法去重

  public static void main(String[] args) {ArrayList<Object> list = new ArrayList<>();list.add(11);list.add(55);list.add(33);list.add(55);list.add(44);
//        System.out.println(list);ArrayList<Object> objects1 = new ArrayList<>(list);for (Object o : list) {//遍历对象数组list,如果不包含if (!objects1.contains(o)) {objects1.add(o);}}

三.Set接口

1.特征:

  • 扩展Collection接口
  • 不重复元素
  • 无序
  • 允许存储null元素,但是最多只能有一个(HashSet)

2.分类:

  1. HashSet类

    元素无序排列,允许有null,重复的元素背覆盖

  2. TreeSet类

    元素按顺序排列

  3. LinkedHashSet类

一).HashSet类

1.方法:

类似List或ArrayList类

2.HashSet去重

public class Main {public static void main(String[] args) {List<Integer> list = new ArrayList<Integer>();list.add(11);list.add(22);list.add(33);list.add(11);Set<Integer> hashSet = new HashSet<Integer>(list);list = new ArrayList<Integer>(hashSet);System.out.println(list);}}

二).TreeSet类

1.特点:

  • 结构红黑树算法(树结构实现);
  • 元素按顺序排列
  • 方法类似LIst…,contains()

三).LinkedHashSet类

LinkedHashSet正好介于HashSet和TreeSet之间,它也是一个hash表,但它同时维护了一个双链表来记录插入的顺序

四.Map接口

一).定义

Map是将键"key"映射到值"value"的对象

Map 接口提供三种collection 视图:

  1. 键集: keySet()
  2. 值集: values()
  3. 键-值集: entrySet()

1.Map集合的特点

  • 双列集合,包含key和value;
  • Map集合中的元素,key和value的数据类型可以相同,也可以不同
  • key不允许重复,value可以重复;
  • key和value是一一对应的。

2.分类

  1. HashMap类:
  2. TreeMap类:
  3. LinkedHashMap类:

3.常用方法:

方法说明
Object
put(Object key, Object value)
将互相关联的一组键/值对放入该映像
Object remove(Object key)从映像中删除与key相关的映射
void putAll(Map t)将来自特定映像的所有元素添加给该映像
void clear()从映像中删除所有映射
Object
get(Object key)
获得与关键字key相关的值
boolean containsKey(Object key)判断映像中是否存在关键字key
boolean containsValue(Object value)判断映像中是否存在值value
int size()返回当前映像中映射的数量
boolean
isEmpty()
判断映像是否为空
Set
keySet()
返回映像中所有关键字的视图集
Collection
values()
返回映像中所有值的视图集
Set entrySet()返回Map.Entry对象的视图集,即映像中的关键字/值对

二).HashMap实现类

使用类似ArrayList类

1.HashMap存储结构(扩展)----了解即可

HashMap底是哈希表,查询速度非常快(jdk1.8之前是数组+单向链表,1.8之后是数组+单向链表/红黑树 ,链表长度超过8时,换成红黑树),可参考:

  1. 数组优点:通过数组下标可以快速实现对数组元素的访问,效率极高;
  2. 链表优点:插入或删除数据不需要移动元素,只需修改节点引用,效率极高。
1、JDK1.8之前HashMap存在的问题?

HashMap通过hash方法计算key的哈希码,然后通过(n-1)&hash公式(n为数组长度)得到key在数组中存放的下标。当两个key在数组中存放的下标一致时,数据将以链表的方式存储(哈希冲突,哈希碰撞)。在链表中查找数据必须从第一个元素开始一层一层往下找,直到找到为止,时间复杂度为O(N),所以当链表长度越来越长时,HashMap的效率越来越低。

2.底层结构—了解

HashMap内部使用数组存储数据,数组中的每个元素类型为Node<K,V>

Node包含了四个字段:hash、key、value、next,其中next表示链表的下一个节点。

三).TreeMap实现类

       TreeMap<Object, Object> treeMap = new TreeMap<>();treeMap.put("111","wefweg");treeMap.put("333","fwef");//key不能为空null,输出NullPointerExceptiontreeMap.put("444",null);//ClassCastException, key不允许重复treeMap.put("222","wefweg");treeMap.put("5555","wefweg");//参System.out.println(treeMap);//迭代方式1: 通过key获取valueSet<Object> keySet = treeMap.keySet();for (Object o : keySet) {System.out.println(o+":"+treeMap.get(o));}System.out.println("........................");//迭代方式2: entrySet()获得keySet<Map.Entry<Object, Object>> entries = treeMap.entrySet();for (Map.Entry<Object, Object> entry : entries) {System.out.println(entry.getKey()+":"+entry.getValue());}

ect o : keySet) {
System.out.println(o+“:”+treeMap.get(o));
}
System.out.println(“…”);
//迭代方式2: entrySet()获得key
Set<Map.Entry<Object, Object>> entries = treeMap.entrySet();
for (Map.Entry<Object, Object> entry : entries) {
System.out.println(entry.getKey()+“:”+entry.getValue());
}


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

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

相关文章

如何在 CentOS 上卸载 Nginx?

本章教程,主要介绍如何彻底卸载删除nginx 一、停止nginx服务 sudo systemctl stop nginx二、卸载nginx服务 sudo yum remove nginx三、查找nginx相关文件 sudo find / -name *nginx*将nginx相关文件进行删除 四、删除nginx相关文件 这里是常见的一些nginx相关文件 s

机器学习/pytorch笔记:time2vec

1 概念部分 对于给定的标量时间概念 t&#xff0c;Time2Vec 的表示 t2v(t)是一个大小为 k1的向量&#xff0c;定义如下&#xff1a; 其中&#xff0c;t2v(t)[i]是 t2v(t)的第 i 个元素&#xff0c;F是一个周期性激活函数&#xff0c;ω和 ϕ是可学习的参数。 以下是个人理解&am…

【MySQL数据库之索引相关】

1、什么是索引&#xff1f; 索引&#xff08;Index&#xff09;是一种用于提高查询效率的数据结构。 索引通过为数据库表中的一列或多列创建一个引用&#xff0c;从而加快数据的检索速度。&#xff08;对列创建索引&#xff09; 索引类似于书的目录&#xff0c;可以帮助数据库…

Shark!一个基于遗传算法的自动因子挖掘平台

DolphinDB 推出的 CPU-GPU 异构计算平台 Shark&#xff0c;将 DolphinDB 上的复杂指标计算能力无缝切换到 GPU 算力平台&#xff0c;大幅提升了计算性能。Shark 最新版本给开发者提供了两个主要功能&#xff1a;因子挖掘和因子计算。通过使用遗传算法&#xff0c;因子挖掘功能能…

编程哲学——抽象

主要参考资料: App Image Format: https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.4/esp32s3/api-reference/system/app_image_format.html# 目录 简介抽象&#xff1a;从现实到模型类和对象&#xff1a;现实与模型的映射封装&#xff1a;隐藏复杂性继承&#…

年薪超过30万的网工,需要具备什么技能?

网工是一个各行各业都需要的职业&#xff0c;工作内容属性决定了它不会只在某一方面专精&#xff0c;需要掌握网络维护、设计、部署、运维、网络安全等技能。 那么&#xff0c;网络工程师的技术水平体现在哪些方面&#xff1f;今天就跟你唠唠这个。 01 先来测测你的网络设计能力…

Flutter 像素编辑器#05 | 缩放与平移

theme: cyanosis 本系列&#xff0c;将通过 Flutter 实现一个全平台的像素编辑器应用。源码见开源项目 【pix_editor】。在前三篇中&#xff0c;我们已经完成了一个简易的图像编辑器&#xff0c;并且简单引入了图层的概念&#xff0c;支持切换图层显示不同的像素画面。 《Flutt…

Docker - Oracle Database 23ai Free

博文目录 文章目录 说明命令NavicatSYSTEMPDBADMIN 扩展公共用户本地用户 说明 Oracle 官方镜像仓库 Database 23ai Free | Oracle Docker 官方没有提供 Oracle Database 相关镜像, 但是 Oracle 官方镜像仓库有提供, 打开上面的链接, 选择 Database, 选择合适的版本, 如 enter…

Modern C++字面量一网打尽

C Literals 数值 二进制、八进制、十六进制字面量 二进制&#xff1a;0b 或 0B开头。八进制&#xff1a;0开头。十六进制&#xff1a;0x 或 0X开头。 // for different base constexpr int base2 0b1111; // 二进制 15 constexpr int base8 017; // 8进制 15 conste…

Elasticsearch:使用 Llamaindex 的 RAG 与 Elastic 和 Llama3

这篇文章是对之前的文章 “使用 Llama 3 开源和 Elastic 构建 RAG” 的一个补充。我们可以在本地部署 Elasticsearch&#xff0c;并进行展示。我们将一步一步地来进行配置并展示。你还可以参考我之前的另外一篇文章 “Elasticsearch&#xff1a;使用在本地计算机上运行的 LLM 以…

Android frida 实战: 分析全民K歌的判断逻辑

本篇进入 Android frida 实战&#xff0c;旨在分析学习全民K歌这个 app 演唱页面的判断逻辑。 版本&#xff1a;8.22.38.278 此 app 为腾讯推出的面向国内的社交娱乐类应用软件&#xff0c;主要功能是提供用户唱歌、录制和分享自己演唱的歌曲。当非 vip 用户演唱某 vip 歌曲等功…

三元前驱体废水回收镍钴工艺:环保与经济效益的双重胜利

在全球新能源产业迅猛发展的背景下&#xff0c;锂离子电池作为绿色能源的核心组件&#xff0c;其需求量激增&#xff0c;带动了上游材料市场&#xff0c;尤其是三元前驱体材料的蓬勃发展。然而&#xff0c;伴随着行业的快速扩张&#xff0c;三元前驱体生产过程中产生的含镍钴废…

Qt开发 | Qmake与CMake | Qt窗口基类 | VS Qt项目与QtCreator项目相互转化 | Qt架构 | Qt学习方法

文章目录 一、Qmake与CMake介绍1.Qmake2.CMake3.使用qmake还是cmake&#xff1f; 二、Qt3个窗口基类的区别三、vs qt与QtCreator项目相互转化方法1.QtCreator项目转VS Qt2.VS Qt项目转QtCreator项目 四、Qt架构介绍与学习方法详解 一、Qmake与CMake介绍 Qmake和CMake都是构建系…

干货分享 | TSMaster 中不同总线报文消息过滤的操作方式

TSMaster软件平台支持对不同总线&#xff08;CAN、LIN、FlexRay&#xff09;报文和信号的过滤&#xff0c;包括全局接收过滤、数据流过滤、窗口过滤、字符串过滤、可编程过滤&#xff0c;针对不同的总线信号过滤器的使用方法基本相同。今天重点和大家分享一下关于TSMaster中报文…

全国首场以AI数字内容风控为主题的大会正式官宣,首批演讲嘉宾和议题揭晓!

曾经我们感叹的“AI迎来了iPhone时刻”&#xff0c;如今已变成“iPhone迎来了AI时刻”。前段时间&#xff0c;苹果全球开发者大会的召开&#xff0c;以及闻声而起的资本市场&#xff0c;无一不再次佐证了AI的无穷想象。 从OpenAI直播演示GPT-4o和谷歌的I/O开发者大会2024&…

Unity踩坑记录

1. 如果同时在父物体和子物体上挂载BoxCollider&#xff0c;那么当使用&#xff1a; private void OnTriggerEnter2D(Collider2D collision){if (collision.CompareTag("CardGroup")){_intersectCardGroups.Add(collision.GetComponent<CardGroup>());}} 来判…

【linux学习十七】文件服务管理

一、FTP FTP server:FTP(File Transfer Protocol,文件传输协议 )是 TCP/IP 协议组中的协议之一 软件包&#xff1a;vsftpd/安装 yum -y install vsftpd//准备文件 touch /var/ftp/abc.txt //注释:FTP服务器的主目录:“/var/ftp/”&#xff0c;是FTP程序分享内容的本机目录…

数据库 复习题

有一个关系模式&#xff1a;工程关系&#xff08;工程号&#xff0c;工程名称&#xff0c;职工号&#xff0c;姓名&#xff0c;聘期&#xff0c;职务&#xff0c;小时工资率&#xff0c;工时&#xff09;&#xff0c;公司按照工时和小时工资率支付工资&#xff0c;小时工资率由…

【大数据】—二手车用户数据可视化分析案例

项目背景 在当今的大数据时代&#xff0c;数据可视化扮演着至关重要的角色。随着信息的爆炸式增长&#xff0c;我们面临着前所未有的数据挑战。这些数据可能来自社交媒体、商业交易、科学研究、医疗记录等各个领域&#xff0c;它们庞大而复杂&#xff0c;难以通过传统的数据处…

Webpack: 底层配置逻辑

概述 Webpack 5 提供了非常强大、灵活的模块打包功能&#xff0c;配合其成熟生态下数量庞大的插件、Loader 资源&#xff0c;已经能够满足大多数前端项目的工程化需求&#xff0c;但代价则是日益复杂、晦涩的使用方法&#xff0c;开发者通常需要根据项目环境、资源类型、编译目…