当前位置: 首页 > article >正文

常用集合的简单总结

单列集合

List:

List系列集合:添加的元素是有序、可重复、有索引

有序:是指存和取的顺序是一样的,不是大小有序。

遍历方式:

迭代器遍历:

增强for遍历:

lambda遍历:

普通for遍历:

Set:

  • HashSet 无序、不重复、无索引
  • LinkedHashSet:有序、不重复、无索引
  • TreeSet:可排序、不重复、无索引
  • 这里的有序指的是保证存储和取出的元素顺序一致

Hashset:

需要在对象中重写hashCode方法alt+inset idea会自动生成

LinkedHashSet:

在以后如果要数据去重,我们使用哪个?

默认使用HashSet

如果要求去重且存取有序,才使用L LinkedHashSet :因为效率比较低

TreeSet

  • 不需要重写hashcode和equals方法因为TreeSet的底层是红黑树,但是要指定排序规则
  • 可排序:按照元素的默认规则(有小到大)排序。
  • TreeSet集合底层是基于红黑树的数据结构实现排序的,增删改查性能都较好。

比较字符串默认是按首字母大小来排序的,如果我们想先按长度进行排序如果长度一样再按首字母排序。就会用到第二中排序方式。

比较器排序:创建TreeSet对象时候,传递比较器Comparator指定规则

使用原则:默认使用第一种,如果第一种不能满足当前需求,就使用第二种

遍历方式:

迭代器遍历:

lambda遍历:

增强for遍历:

双列集合

双列集合的特点:

双列集合一次需要存一对数据,分别为键和值

键不能重复,值可以重复

键和值是一一对应的,每一个键只能找到自己对应的值

键+值这个整体我们称之为“键值对”或者“键值对对象”,在Java中叫做"Entry对象"

双列集合的遍历方式:

键值对

键找值:

Lambda表达式:

Set<Map.Entry<String, String>> entries = map.entrySet();
        //匿名内部类
       map.forEach(new BiConsumer<String, String>() {
           @Override
           public void accept(String key, String value) {
               System.out.println(key+"="+value);
           }
       });
    

HashMap

  • 特点都是由键决定的:无序、不重复、无索引
  • HashMap跟HashSet底层原理是一模一样的,都是哈希表结构

LinkedHashMap

由键决定:有序、不重复、无索引。

底层数据结构是依然哈希表,只是每个键值对元素又额外的多了一个双链表的机制记录存储的顺序。

TreeMap

TreeMap跟TreeSet底层原理一样,都是红黑树结构的。

由键决定特性:不重复、无索引、可排序

可排序:对键进行排序。

注意:默认按照键的从小到大进行排序,也可以自己规定键的排序规则

代码书写两种排序规则:

实现Comparable接口,指定比较规则。

创建集合时传递Comparator比较器对象,指定比较规则。


http://www.kler.cn/a/533364.html

相关文章:

  • 数据结构-堆和PriorityQueue
  • 【Java】位图 布隆过滤器
  • Baklib探讨如何通过内容中台提升组织敏捷性与市场竞争力
  • kubernetes 高可用集群搭建
  • 86.(2)攻防世界 WEB PHP2
  • 走向基于大语言模型的新一代推荐系统:综述与展望
  • VSCode编辑前端快速开发模板
  • c++ Base64编码
  • 使用python实现与本地ollama部署的deepseek对话
  • p5r预告信生成器API
  • Windows Docker笔记-安装docker
  • C++ 入门速通-第5章【黑马】
  • iOS 老项目适配 #Preview 预览功能
  • python基础入门:2.1变量与基本数据类型
  • 音频录制一般在什么情况下会选择保存为PCM?什么情况会选择保存为WAV?
  • torchtext.get_tokenizer
  • C32.【C++ Cont】静态实现双向链表及STL库的list
  • 蓝桥杯整数删除(优先队列pair,模拟链表)
  • 今日AI和商界事件(2025-02-05)
  • punkt缺失问题
  • 定时任务单线程消费 redis 中数据导致消费能力不足
  • Docker深度解析:部署 SpringBoot 项目
  • TensorFlow是个啥玩意?
  • 学习threejs,pvr格式图片文件贴图
  • 108,【8】 buuctf web [网鼎杯 2020 青龙组]AreUSerialz
  • 每日Attention学习18——Grouped Attention Gate