java集合

一  .概述

说明: 

1.list接口和set接口继承自collection接口,Map是独立接口

2.List下有ArrayList,Vector,LinkedList

3.Set下有HashSet,LinkedHashSet,TreeSet

4.Map下有Hashtable,LinkedHashMap,HashMap,TreeMap

二 .List

存放有序,可重复元素

1.ArrayList

实现RandomAccess(标记接口)代表ArrayList是支持快速随机访问  ,实现Cloneable(标记接口)代表ArrayList是可以拷贝  ,实现Serializable(标记接口)代表ArrayList是可以序列化的

(1)   ArrayList数组线性表的特点为:类似数组的形式进行存储,因此它的随机访问速度极快

(2)   ArrayList数组线性表的缺点为:不适合于在线性表中间需要频繁进行插入和删除操作。因为每次插入和删除都需要移动数组中的元素

(3)   如果在初始化ArrayList的时候没有指定初始化长度的话,默认的长度为10

(4)   ArrayList在增加新元素的时候如果超过了原始的容量的话,ArrayList扩容ensureCapacity方案为“原始容量*3/2"

(5)  ArrayList是线程不安全的,在多线程的情况下不要使用,如果要在多线程下使用可以使vector,用法基本一致 区别在于Vector中的绝大部分方法都使用了同步关键字修饰,这样在多线程的情况下不会出现并发错误 ArrayList是通过原始 容量*3/2+1而Vector是允许设置默认的增长长度Vector的默认扩容方式为原来的2倍

(6) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出ConcurrentModificationException;为了防止删除时出现这个问题,使用Iterator中的remove方法

2.LinkedList

继承了AbstractSequentialList,它可以被当作堆栈、队列或双端队列进行操作  ;实现 Deque 接口代表LinkedList可以当作双端队列使用  ;实现Cloneable(标记接口)代表LinkedList是可以拷贝实现Serializable(标记接口)代表LinkedList是可以序列化的

(1)  LinkedList的链式线性表的特点为: 适合于在链表中间需要频繁进行插入和删除操作

(2) LinkedList的链式线性表的缺点为:随机访问速度较慢。查找一个元素需要从头开始一个一个的找

(3)是一种双向循环链表的链式线性表,只不过存储的结构使用的是链式表而已

(4) LinkedList的内部是基于双向循环链表的结构来实现的在LinkedList中有一个类似于c语言中结构体的Entry内部类

(5)在Entry的内部类中包含了前一个元素的地址引用和后一个元素的地址引用类似于c语言中指针

三 .Set

Set中的元素实现了不重复,有点象集合的概念,无序,不允许有重复的元素,最多允许有一个null元素对象

虽然Set中元素没有顺序,但是元素在set中的位置是有由该元素的HashCode决定的,其具体位置其实是固定的

Set中存储的值,其实就是Map中的key,它们都是不允许重复的

对象A和对象B,本来是不同的两个对象,正常情况下它们是能够放入到Set里面的,但是

如果对象A和B的都重写了hashcode和equals方法,并且重写后的hashcode和equals方法是相同的话。那么A和B是不能同时放入到Set集合中去的,也就是Set集合中的去重和hashcode与equals方法直接相关

1.Hashset

(1) 底层数据结构是哈希表

(2)  Hashset中允许出现一个null值

(3)  由于HashSet底层是基于Hash算法实现的,使用了hashcode,所以HashSet中相应的元素的位置是固定的

(4) 线程不安全

2 .LinkHashSet

(1)底层数据结构是链表和哈希表,由链表保证元素有序,由哈希表保证元素唯一

 (2) 线程不安全

3.TreeSet

 (1) 线程不安全

 (2)底层数据结构是红黑树。(唯一,有序)

 (3) 当向TreeSet中添加自定义的对象时,有两种排序:自然排序  定制排序

 (4)向TreeSet中添加元素时,首先按照compareTo()进行比较,一旦返回0,虽然仅是两个对象的此属性值相同,但是程序会认为这两个对象是相同的,进而后一个对象就不能添加进来

四 .Map


1.HashMap

(1)  允许key为null,也允许value为null

(2)   Hash表是一个数组+链表的结构 这种结构能够保证在遍历与增删的过程中,如果不产生hash碰撞,仅需一次定      位就可完成 但是如果散列表中的hash碰撞过多时当一个hash值上的链表长度大于8时,该节点上的数据就不再以链表进行  存储,而是转成了一个红黑树。

(3)   hash碰撞两个元素通过hash函数计算出的值是一样的,是同一个存储地址当后面的元素要插入到这个地址时,发现已经被占用了这时候就产生了hash冲突


一些初始化的值


构造方法
构造方法

(4)hashMap的put方法实现思路:

1.table[]是否为空

2.判断table[i]处是否插入过值

3.判断链表长度是否大于8,如果大于就转换为红黑二叉树,并插入树中

4.判断key是否和原有key相同,如果相同就覆盖原有key的value,并返回原有value

5.如果key不相同,就插入一个key,记录结构变化一次

(5)hashMap的get方法的实现思路:

1.判断表或key是否是null,如果是直接返回null

2.判断索引处第一个key与传入key是否相等,如果相等直接返回

3.如果不相等,判断链表是否是红黑二叉树,如果是,直接从树中取值

4.如果不是树,就遍历链表查找


五 .集合的遍历

1.list的遍历

方法1
方法2

2.Map的遍历

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