2022-12-26

一、容器、集合

二、数据结构

计算机存储和管理数据的方式
增、删、改、查数据

三、不同数据结构管理数据性能分析

1、数组


image.png

(1)增加
在最后位置,操作1次
在第一个位置,操作n次
(2)删除
在最后位置,操作1次
在第一个位置,操作n次
(3)修改
给定索引,操作1次
(4)查询
根据索引查询,操作1次
根据内容查询,操作n次
2、链表


image.png

(1)增加
只需把元素加到某个地方,让上一个元素存储该元素地址,在该元素地址区域存储下一个元素的地址即可

(2)删除
让存储要删除元素地址的上一个元素,直接存储下一个元素的地址即可
(3)修改
没有索引,只能从头依次寻找再修改,比较复杂
(4)查询
没有索引,只能从头依次寻找,比较复杂


image.png

3、栈
image.png

栈有栈顶和栈底
压栈和出栈都从栈顶
数据存储的特点是先进后出或后进先出
4、队列
image.png

队列有队列头和队列尾
从队列尾进,从队列头出
数据存储的特点是先进先出

四、集合体系树

image.png

数组与集合的不同
1、数组在创建时,必须指定长度
集合在创建时,不用指定长度
2、数组长度一旦确定,就不能更改,更改了长度,就产生了新数组
集合长度可更改,不会产生新的集合
3、数组既可以存储基本数据类型,也可以存引用数据类型
集合只能存引用数据类型(存储基本数据类型不报错,是因为发生了自动装箱)

五、Collection

线性表集合,是个接口
有两个子接口,List和Set

六、List

有序可重复的线性集合,是个接口
有很多实现类,我们着重讲ArrayList和LinkedList

七、ArrayList

底层是数组,有一个兄弟是Vector(底层是数组,线程安全,效率低,因此不太常用)

八、ArrayList源码

1、无参构造方法,为elementData属性赋一个长度为0的数组,即EMPTY_ELEMENTDATA(166行)
2、add方法,调用ensureCapacityInternal方法,并传递值1进去(464行),
3、在ensureCapacityInternal方法内部,先调用calculateCapacity(elementData, minCapacity)方法,再把结果作为参数调用ensureExplicitCapacity方法,此时elementData指向长度为0的数组,minCapacity值是1(233行)
4、在calculateCapacity方法内部判断接收到的elementData是不是DEFAULTCAPACITY_EMPTY_ELEMENTDATA这个长度为0的数组,如果是,比较DEFAULT_CAPACITY(即10)和minCapacity(即1)哪个是较大的值,得到10,并返回(227行)
5、调用ensureExplicitCapacity方法,并传递10进去(233行)
6、在ensureExplicitCapacity方法内部,让modCount自增1(第一次变为1),判断形参minCapacity与elementData长度是不是大于0,如果是,就调用grow方法,并把minCapacity(即10)传递给grow方法(237行)
7、在grow方法内部,把elementData长度赋给oldCapacity,把1.5倍的数值给了newCapacity变量,判断newCapacity(0)和minCapacity(10)的大小,
如果newCapacity小于minCapacity,newCapacity接收minCapacity的值
如果newCapacity大于2的31次方-9,调用hugeCapacity方法,把minCapacity传进去(258行)
生成新数组,长度为newCapacity(即10),把原有的数组元素复制到从新数组中,并把该数组的地址送到elementData成员变量中
8、以上方法调用完,回到464行,继续执行add方法,此时elementData已经指向了一个长度为10的新数组,把接受的e对象放到数组中,并且成员变量size增加1(464行)

九、遍历集合

1、普通for循环

for(int i = 0;i < list.size();i++) {
            System.out.println(list.get(i));
        }

2、迭代器

        Iterator it = list.iterator();
        //判断游标右侧有没有元素
        //it.hasNext();
        //游标向右移动一次,并且返回跨越的元素
        //Object o = it.next();
        while(it.hasNext()) {
            Object o = it.next();
            System.out.println(o);
        }

3、增强for循环

        for(Object o : list) {
            System.out.println(o);
        }

4、兰姆达表达式

        list.forEach(a -> {
            System.out.println(a);
        });

以上都是查询,如果在遍历过程中想修改元素,只能通过普通for循环

十、

List集合特点:有序可重复
有序:在集合中存放的顺序和当时存入的顺序一致
可重复:可以存放重复数据

十一、泛型

泛型限定可以放入集合的元素类型

十二、ArrayList存储对象内存图

image.png

十三、如何选择List集合的实现类

对于查询比较多的数据,建议用ArrayList
对于增删比较多的数据,建议用LinkedList

十四、使用集合的习惯

List<User> list = new ArrayList<User>();

作业

1、教务管理系统用list改写
2、用LinkedList模拟栈
3、用LinkedList模拟队列

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

推荐阅读更多精彩内容