首页 > 其他分享 >集合

集合

时间:2023-08-21 11:25:16浏览次数:30  
标签:HashSet 链表 3.2 数组 集合 线程 Segment


1.List

1.1 ArrayList

内部数组实现,可以快速随机访问。数组大小不满足时,已有数组复制到新的空间中。适合查找遍历。
线性安全 Collections.synchronizedList

List synchronizedList = Collections.synchronizedList(new ArrayList<>());

1.2 Vector

数组实现,支持线程同步,因此访问慢

1.3 LinkedList

链表结构,适合插入删除,有操作表头,表尾的方法,当做栈,队列,双向队列使用

2.Set

对象相等性是对象hashCode值(根据内存地址计算),俩个对象相同,必须覆盖hashCode和equals方法

2.1 HashSet

HashSet 首先判断两个元素的哈希值,如果哈希值一样,接着会比较
equals 方法 如果 equls 结果为true ,HashSet 就视为同一个元素。如果equals 为false 就不是同一个元素。

2.2 TreeSet

  • 按照二叉树原理对add新对象排序
  • 自定义对象必须实现Comparable接口且覆盖compareTo函数

2.3 LinkedHashSet

使用LinkedHashMap保存元素,继承HashSet,方法上与其相同

3.Map

3.1 HashMap

  • 根据键的hashCode 值存储数据
  • 非线程安全,使用Collections 的synchronizedMap或ConcurrentHashMap

3.1.1 Java 7实现

整体是数组,数组中每个元素是单向链表,扩容后为当前2倍
根据hash值定位到数组下标,但是需要顺着链表一个个比较下去才能找到我们需要的,时间复杂度取决于链表的长度,为 O(n)

3.1.2 Java 8实现

链表元素超过8个,将链表转化为红黑树。O(logN)

3.2 ConcurrentHashMap

整个 ConcurrentHashMap 由一个个 Segment 组成,Segment 代表”部分“或”一段“的意思,所以很多地方都会将其描述为分段锁。

3.2.1 线程安全

Segment 通过继承ReentrantLock 来进行加锁,所以每次需要加锁的操作锁住的是一个 segment,这样只要保证每个Segment 是线程安全的,也就实现了全局的线程安全。

3.2.2 Java7

  • 并行度concurrencyLevel:默认16,有16个segments段,最多支持同时16个线程并行写,该参不可扩容

3.2.3 Java8

引入红黑树

3.3 HashTable

遗留类

3.4 TreeMap

标签:HashSet,链表,3.2,数组,集合,线程,Segment
From: https://www.cnblogs.com/lwx11111/p/17645503.html

相关文章

  • 洛谷集合题单
    发现自己的基础代码能力还有待提高【数据结构1-3】集合-题单-洛谷|计算机科学教育新生态(luogu.com.cn)P5250【深基17.例5】木材仓库-洛谷|计算机科学教育新生态(luogu.com.cn)学习set的使用搬个知乎的STL教程(九):C++STL常用容器之set/multiset-知乎(zhihu.c......
  • Dart对集合数组进行降序排列的方法
    在Dart中,你可以使用List的sort()方法对集合数组进行排序。要按降序排列,可以在排序方法中指定一个自定义的比较函数。以下是一种常见的降序排序方法:List<int>numbers=[3,1,4,2,5];numbers.sort((a,b)=>b.compareTo(a));print(numbers);//[5,4,3,2,1]在上述示例中,......
  • 爱心代码集合
    爱心代码集合 packageLove;​publicclassLover{    publicstaticvoidmain(String[]args){      //TODOAuto-generatedmethodstub      for(floaty=(float)1.5;y>-1.5;y-=0.15){        for(floatx=(fl......
  • 带你了解 Stream 的使用,提升集合开发效率
    当涉及Java编程时,JavaStream是一个功能强大且高效的工具,用于处理集合数据。它提供了一种声明式的方式来操作数据,可以显著简化代码并提高可读性。在本文中,我们将深入探讨JavaStream,介绍其基本概念、常用操作和用例。什么是JavaStreamJavaStream是Java8引入的一种新的抽......
  • Python列表、元组、字典、集合、字符串
    一、代码例题1、阿凡提与国王比赛下棋,国王说要是自己输了的话阿凡提想要什么他都可以拿得出来。阿凡提说那就要点米吧,棋盘一共64个小格子,在第一个格子里放1粒米,第二个格子里放2粒米,第三个格子里放4粒米,第四个格子里放8粒米,以此类推,后面每个格子里的米都是前一个格子里的2倍,一直把64......
  • Java Collection集合体系
    Collection集合体系Collection集合常见方法List集合遍历方式什么是迭代器ArrayList集合底层LinkedList集合底层Set集合HashSet集合底层LinkedHashSet底层TreeSet底层......
  • 03-04 基本数据类型(列表、元组、字典、集合)
    一、列表1、访问列表中的值list=['red','green','blue','yellow','white','black']print(list[0])#'red'print(list[1])print(list[2])print(list[-1])#blackprint(list[-2])#whiteprint(li......
  • Java集合相关知识
    1、Collection的使用importjava.util.ArrayList;importjava.util.Collection;importjava.util.Iterator;publicclassMain{publicstaticvoidmain(String[]args){//创建集合Collectioncollection=newArrayList();//添加元素......
  • java stream流 实现集合数据的多次分组
    在Java中,使用Stream流进行多次分组可以通过多次调用Collectors.groupingBy方法实现。每次调用groupingBy方法都会将元素按照指定的分类条件进行分组。importjava.util.*;importjava.util.stream.Collectors;publicclassStreamGroupingExample{publicstaticvoidmain......
  • 【校招VIP】java语言类和对象之map、set集合
    考点介绍:map、set集合相关内容是校招面试的高频考点之一。map和set是一种专门用来进行搜索的容器或者数据结构,其搜索效率与其具体的实例化子类有关系。一、考点题目1、HashMap为什么线程不安全?解答:并发赋值被覆盖:在createEntry方法中,新添加的元素直接放在头部,使元素之后可......