Java集合框架

集合分为Collection和Map两种体系

Collection接口:单列数据,定义了一组存取对象的方法的集合

  • List接口:元素有序,可重复的集合
  • Set接口:元素无序,不可重复的集合
Collection接口继承图

Map接口:双列数据,保存具有映射关系,key-value对的集合

Map接口继承图

集合

开发中集合的选择

  • List集合
    如果需要保留存储顺序并保存重复元素,推荐使用List集合
  • ArrayList: 若查询较多,推荐使用ArrayList
  • LinkedList:若存取较多,推荐使用LinkedList
  • Vector:若需要线程安全,推荐使用Vector,但开发中一般由程序员来实现集合的线程安全,不常用
  • Set集合
    如果不需要保留存储顺序并需要去除重复的元素,推荐使用Set集合
  • HashSet:若不需要排序时,推荐使用HashSet,HashSet比TreeSet效率高
  • TreeSet:若需要将元素排序,推荐使用TreeSet
  • LinkedHashSet:若需要保留存储顺序,又需要去除重复元素,推荐使用LinkedHashSet

List接口

是用于有序存储可重复元素的集合
List接口继承了Collection接口,声明有序存储对象(对象可重复)功能的公共接口

ArrayList
  • 数组实现,查找快,增删慢
  • 由于是数组实现,在增加或删除时,会牵扯到数组扩容以及元素的拷贝,所以效率慢,数组是可以直接按索引查询,所以查询的时候,较快
LinkedList
  • 链表实现,增删快、查询慢,由于链表实现:
    1、增加时只要让前一个元素记住自己就可以了
    2、删除时,让前一个元素记住后一个元素,后一个元素记住前一个元素,这样增删效率比较高
    3、查询时需要一个一个的遍历,效率比较低
Vector
  • 基于数组实现的,线程同步的遗留集合类,
  • 和ArrayList原理相同,但线程安全,效率比较低,一般来讲,线程安全的东西,效率有点影响
Stack
  • 栈(stack)是一种后进先出(LIFO)的集合类型, 即后来添加的数据会先被删除
  • 可以将其类比于下面文件的取放操作:新到的文件会被先取走,这使得每次取走的文件都是最新的
  • 实现栈有以下2种方式
    1、用数组实现栈
    2、用链表实现栈
image.png
Queue
  • 队列属于一种遵循先进先出(FIFO)原则的集合类型
  • 可以将其类比为生活中一些以公平性为原则的服务场景:排成一排的客户等待服务,等待最久即最先入列的客户应该最先提供服务(出列)
  • 实现队列有以下2种方式
    1、用链表实现队列
    2、用循环数组实现队列
image.png

栈遵循后进先出的原则,所以要在数组或链表同一端做添加和删除操作
队列遵循先进先出的原则, 所以要在数组或链表的两端分别做插入和删除的操作

Set接口

  • Set接口继承了Collection接口,声明无序存储对象(对象不可重复)功能的公共接口,不能通过索引方式获取
  • Set接口的实现类,判断两个对象是否相等,不是通过 ==运算符,而是根据equals()方法比较
  • 由于集合元素是不可重复的,如果试图把一个对象存放在Set容器中时,对应的类必须重写equlas()方法和hashCode(Object obj)方法,以实现对象相等规则,插入元素时会进行hash验证
HashSet
  • HashSet无序不可重复
  • HashSet不是线程不安全
  • 基于hash算法来存储集合中的元素,因此具有很好的存取、查找、删除性能
LinkedHashSet
  • LinkedHashSet有序不可重复
  • LinkedHashSet是HashSet的子类
  • LinkedHashSet根据元素的hashCode值来决定元素的存储位置,但它同时使用双向链表维护元素的次序,这使得元素看起来以插入顺序保存的
  • LinkedHashSet插入性能略低于HashSet,但在迭达访问Set集合元素时有不错的表现
TreeSet
  • TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态
  • TreeSet底层使用红黑树结构存储数据
  • TreeSet有两种排序方式:自然排序、定制排序
  • 如果试图把一个对象添加到TreeSet集合时,则该对象的类必须实现Comparable接口

Map接口

  • Map接口用于保存映射关系的数据,key-value
  • Map中的key和value,可以是任何引用类型的数据
  • Map中的key是用Set存放的,不允许重复,即作为key的类,一定要重写hashCode()和equals()方法
  • 一般常用String类型,作为Map集合中的key
HashMap
image.png
LinkedHashMap
image.png
TreeMap
image.png
Hashtable
image.png
Properties
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • 原文地址 Java集合 Java集合框架:是一种工具类,就像是一个容器可以存储任意数量的具有共同属性的对象。 Ja...
    gyl_coder阅读 978评论 0 8
  • 一、Java集合框架概述 集合可以看作是一种容器,用来存储对象信息。所有集合类都位于java.util包下,但支持...
    风平浪静如码阅读 565评论 0 1
  • 数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。Java提供了几个能有效地...
    吕侯爷阅读 1,979评论 0 10
  • ls -l 权限管理命令 思考题用户对目录有写权限,但对目录下的文件没有写权限时,能否修改此文件内容?能否删除此文...
    极简series阅读 138评论 0 1
  • 阿楠,你有记恨过父母吗? 看到朋友的这个问题,我沉默了,不知道怎么回答。 我知道她又难受了,应该是跟家里刚通过电话...
    如果悦读阅读 671评论 1 2