Java集合

<blockquote><p>Java集合框架的设计主要目的是为了提供一种通用、高效和可扩展的数据结构和算法库,以满足不同的编程需求。</p></blockquote><p>Java提供了各种类和接口,可以用于实现不同类型的集合数据结构 如列表(List)、集(Set)、映射(Map)等。</p><h3>Java中实现了List接口的集合类</h3><ol><li><p>ArrayList:基于数组实现的动态数组,支持随机访问和快速插入删除元素,可以根据需要自动调整大小。是最常用的List实现类之一。</p></li><li><p>LinkedList:基于链表实现的双向列表,支持快速插入删除元素,但随机访问较慢。适用于频繁插入删除操作。还实现了Queue接口,可以用作队列数据结构。</p></li><li><p>Vector:是一个线程安全的动态数组,与ArrayList功能类似,但所有方法都是同步的。在多线程环境中使用Vector可以确保线程安全,但性能相对较低。</p></li><li><p>Stack:基于Vector实现的栈(后进先出)数据结构,也是线程安全的。主要提供了入栈(push)、出栈(pop)和查看栈顶元素(peek)等操作。</p></li><li><p>CopyOnWriteArrayList:是一个线程安全的动态数组,通过复制整个数组来实现并发安全。使用了"写时复制"的策略,在对数组进行修改操作时会创建一个新的副本,从而保证读操作的高效性,适用于读多写少的场景。</p></li><li><p>Immutable List(不可变列表):Java 9及以上版本引入了List.of()方法,用于创建不可变的列表,其中的元素不可被修改。些列表的长度在创建后是固定的,不支持添加、删除或修改元素。</p></li><li><p>Arrays.asList():不是一个独立的集合类,而是将数组转换为List的快捷方式。通过Arrays.asList()方法,可以将一个数组转换为固定大小的List。但需要注意的是,由于该List是基于原始数组的,因此无法使用添加或删除元素的方法。</p></li></ol><h3>Java中实现了Map接口的集合类</h3><ol><li><p>HashMap:是最常用的Map实现类之一,通过链表维护元素的插入顺序。提供了快速的插入、查找和删除操作,但不保证元素的顺序。</p></li><li><p>LinkedHashMap:是HashMap的一个子类,保留了插入键值对的顺序。在迭代时,按照插入顺序或访问顺序进行遍历。</p></li><li><p>TreeMap:是一个基于红黑树实现的有序映射。按照键的自然顺序或特定的比较器顺序对键进行排序。</p></li><li><p>Hashtable:是一个线程安全的哈希表,与HashMap功能类似,但所有方法都是同步的。尽管效率较低,Hashtable仍然被广泛应用在旧的Java代码中。</p></li><li><p>ConcurrentHashMap:ConcurrentHashMap是一个线程安全的哈希映射实现,支持并发访问和更新。在多线程环境下,使用普通的HashMap可能会导致意外的结果,如死锁或数据不一致。而ConcurrentHashMap通过采用分段锁(锁分段技术)来对不同的片段进行并发控制,从而实现高度的并发性能。ConcurrentHashMap通过将哈希表分成多个小的片段,每个片段拥有自己的锁,不同片段的操作可以并发进行,从而提供了更好的并发性能。使得ConcurrentHashMap非常适合在多线程环境下进行高效的并发读写操作。</p></li><li><p>WeakHashMap:WeakHashMap是一个特殊的映射实现,用于保存对键的弱引用。弱引用是指如果一个对象只被弱引用所引用,而且没有其他强引用指向,那么在垃圾回收时个对象就会被回收。因此,当使用WeakHashMap存储键值对时,如果某个键只有WeakHashMap持有的弱引用,那么当该键没有被其他地方引用时,可能会被垃圾回收器回收,并从WeakHashMap中自动移除。使得WeakHashMap非常适合用于缓存、高速缓存和一些特殊的应用场景,其中被缓存的对象在其他地方不再被使用时可以自动被回收。</p></li><li><p>IdentityHashMap:这是一个特殊的Map实现类,它使用引用相等(而不是对象相等)来判断键的唯一性。在IdentityHashMap中,两个键只有在它们引用同一个对象时才被认为是相等的。</p></li><li><p>EnumMap:这是专门用于枚举类型作为键的Map实现类。它提供了高效的枚举键的存储和检索。</p></li><li></li></ol><h3>Java中实现了Set接口的集合类</h3><ol><li><p>HashSet:是最常用的Set实现类之一,使用哈希表来存储元素。HashSet不保证元素的顺序,且不允许重复元素。</p></li><li><p>LinkedHashSet:是HashSet的一个子类,保留了插入元素的顺序。在迭代时,按照插入顺序进行遍历。</p></li><li><p>TreeSet:是一个基于红黑树实现的有序Set。按照元素的自然顺序或特定的比较器顺序对元素进行排序。</p></li><li><p>EnumSet:是专门用于枚举类型的Set实现类。内部使用位向量实现,可以高效地存储、查询和操作枚举常量。EnumSet提供了一系列针对枚举类型的特定操作,例如按照枚举常量的声明顺序迭代元素,以及执行按位操作(如交集、并集)等。</p></li><li><p>CopyOnWriteArraySet:这是一个基于CopyOnWriteArrayList的并发安全Set实现类。它在添加、删除元素时会创建一个新的数组来避免并发修改异常。在迭代时,它保证遍历到的元素是在创建迭代器时的快照,即不会受到其他线程修改的影响。</p></li><li><p>ConcurrentSkipListSet:ConcurrentSkipListSet是一个线程安全的有序集合实现,底层使用跳表数据结构。提供了高效的插入、删除和查找操作,并且元素按照自然排序或自定义排序顺序进行排列。</p></li></ol>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容

  • 集合框架 JCF(Java collections framework),也就是java集合框架 包括: 集合(C...
    jection阅读 2,307评论 0 6
  • 集合在我们日常开发使用的次数数不胜数,ArrayList/LinkedList/HashMap/HashSet··...
    酷拼车阅读 393评论 0 0
  • Java集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 1,898评论 0 13
  • 1.概况 Collection 1. Set TreeSet:基于红黑树实现,支持有序性操作,例如根据一个范围查找...
    Hwyoung阅读 435评论 0 0
  • 前言 大部分编程语言都提供了数组来保存对象,数组是非常重要的数据结构之一。但是数组在初始化时就已经定义了数组长度,...
    海人为记阅读 487评论 0 1