java集合学习记录

来源:互联网 发布:mac桌面新建文件夹 编辑:程序博客网 时间:2024/05/15 01:24

java集合类有一个根接口 Collection 称它为容器也不为过。Collection接口里面抽象了对一个集合能进行操作的所有方法。

它的子接口 set 和 list 又分别增加了对应自身特性的方法。这正是java面向对象思想的体现。还有一个特殊的接口Map接口,用来存储键值对。其中key是不可重复的,key的集合类似于set,value的集合可重复 类似于list。

下面 我记录一下 学习list 与 map的  心得体会。

list 其实就是一个线性表。元素有序的排列,其物理存储分为顺序存储和链式存储。 实现了对容器中元素进行增删改查诸多功能。 jdk中提供了list的数组实现arraylist 与 linkedlist。 我们可以直接使用的,非常方便。   但是如果自己简单的实现一遍,也算对数据结构的巩固了。

ArrayList 的实现 是基于 定义了一个固定大小Object数组,并定义了一个size来记录数组内元素的个数。 所有的操作都是围绕着这个数组与 size来实现的。很明显,ArrayList的插入与删除均为O(N); 但是索引为O(1).     关键的技术有  合法性检查、  数组的自动扩容 (新申请一个更大的数组,并将旧数组的元素复制到新的数组)、数组元素整体前移和后移。

LinkList的实现    定义了一个节点Node类,包含next,previous节点并提供一个Object属性。    定义了一个链表类 包含Node数组,与size。  所有的操作都是围绕这个Node数组和size来实现的。   插入与删除操作均是O(1),但是索引为O(n).   

下面是map的学习体会

map接口 定义了所有关于 键值对集合 操作。 它的特性是Key不可重复,value可以重复。一个key只能索引到一个value。


map的操作hash实现 是数组与链表的结合。 定义了一个链表数组。数组元素就是一个链表。   通过key的hashcode值与数组大小取余 其余数作为数组下标。





0 0
原创粉丝点击