容器基础

catalogue(目录)
当你有很多书时,你会考虑买一个书柜, 将其分门别类摆放。使用书柜不仅使房间变得整洁, 也便于以后使用时查找。
1)集合简介。
Java中提供了丰富的集合接口和类, 他们来自Java.util包。 Java集合类分为Collection和Map, Collection子类接口有Set、Queue和List等接口,每一种接口描述了一种数据结构。
2)List集合。
a、List列表子分类:具备特点:有序,可重复(便于理解:可以通过索引查询元素),实现List接口的集合类有ArrayList和LinkedList。
b、ArrayList:是基于动态数组数据结构实现的。ArrayList访问元素的速度优于LinkedList。动态扩容,通过Arrays.copyof()方法进行动态扩容,扩容后新容器的大小是原容量的1.5被,第一次添加数据初始容量为10,加载因子(0~1):1。
b.1动态数组:
c、LinkedList:是基于链表数据结构实现的。LinkedList占用空间大,但批量插入或删除数据时优于ArrayList。
c.1LinkedLis双向链表数据结构:
单向链表:连接不同的节点,每一个数据都是一个节点node。 左边是数据右边是地址。最后一个节点的地址为null。
双向链表:中间记录的时数据,两边是地址。没连接就是null。
d、vector:向量:与ArrayList类似,但是线程安全的
注意:不同的结构对应不同的算法,有的考虑节身空间, 有的考虑提高运行速度,对于程序员而言,他们就像“熊掌”和“鱼肉”,不可兼得。运行速度和空间必有 优与缺。
e、常用方法:
注意: 这些方法都是别人封装写好的,我们自己也可以写,但性能可能较差,但一定要知道流程。
操作元素:
get(int index):返回List集合中指定位置的元素 。 例子:List.get(3);
set(int index,Object element):用指定元素替换List集合中的指定位置的元素。
add(int index,Object element):在List集合的指定位置加入指定元素
void clear();移除此collection中的所有元素。 col2.clear().
boolean remove(Object o);移除指定元素
判断元素:
isEmpty():判断List集合中是否有元素,如果有返回false,没有返回true。 继承collection
contains(Object element):判断List集合中是否包含指定元素,有返回true, 继承collection
查询元素:
indexOf(Object o):从前往后查,返回第一次指定元素的索引。没有该元素返回-1.
lastIndexOf(Object o):从后往前查,返回第一次指定元素的索引。没有该元素返回-1.
其他:
iterator();返回迭代器对象。继承collection
size():返回List集合中的元素数。继承collection
subList(int fromIndex,int toIndex):返回List集合中指定的fromIndex(包括)和toindex(不包括)之间的元素集合,返回值为List集合。
f、遍历集合:
普通for循环遍历。
增强for循环遍历
迭代器遍历Iterator:
hasNext():判断集合中是否还有元素。
next():返回下一个元素。

3)Set集合。
a、Set集合是有一串无序的,不能重复的相同类型元素构成的集合(便于理解:通过唯一元素查值)。 Set接口直接实现类主要时HashSet和TreeSet。
(1):HashSet:
(2):TreeSet:存储引用数据类型的时候(引用数据类型对象的排序,引用数据类型对象的去重):引用数据类型1)实现内部比较器 2)自定义外部比较器。
a.1:HashSet数据结构:(数组+链表+红黑树)特点
(1):用hashCode(位置=数据%9)方法算出桶的位置。
(2):把当前数据存放在对应的桶中,存之前对比equals()看是否有数据,如果没有直接存,如果有那桶中的数据与要存放的数据比较是否相同,如果相同就去重不存放。
(3):桶中数据之间用链表数组结构连接。
(4):如果桶中的数据超过8个,以红黑树的结构存储。
a2:treeSet底层结构:红黑树特点:
b、常用方法:
操作元素:
add(E e): 添加指定元素到Set集合尾部。
clear();移除此collection中的所有元素。 col2.clear().
remove(Object element)移除指定元素
判断元素:
isEmpty():判断Set集合中是否有元素,如果有返回false ,没有返回true。 继承collection
contains(Object element):判断Set集合中是否包含指定元素,有返回true, 继承collection
其他:
iterator();返回迭代器对象。继承collection
size():返回Set集合中的元素数。继承collection
c、遍历:
Set集合中的元素由于没有序号, 所以不能用于for循环进行遍历,但可以用增强for 和迭代器Iterator。
4)Map集合。
a、Map(映射)是由两个集合构成,一个是键(key)集合,一个是值(value)集合。键集合是set类型,因此不能有重复的元素。而值集合是Collection类型,可以有重复的元素。map集合中的键和值是成对出现的。
注意:Map集合更适合通过键快速访问值,就像英文字典一样,键就是要查找的英文单词, 而值就是英文单词的翻译和解释等。
b、Map接口直接实现类主要是HashMap, HashMap是基于散列表数据结构的实现。
b1、hashMap散列表数据结构特点:
c、常用方法:
操作元素:
get(Object key):返回指定键所对应的值;不包含该键值,返回null
put(Object key,Object value):指定键值对添加到集合中。
remove(Object key):移除键值对。
clear():移除map集合中所以键值对。
判断元素:
isEmpty():判断Map集合中是否有键值对,如果有返回false。 继承collection
containsKey(Object key):判断键集合是否有包含指定元素,包含返回true。
containsValue(Object value):判断值集合是否有包含指定元素,包含返回true。
查看集合:
KeySet():返回Map中的所有键集合,返回值是set类型。
values():返回Map中的所有值集合,返回值是collection类型。
size():返回Map集合中键值对数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值