集合小结

集合

集合的出现:数组能够保存多个对象,但是在某些情况下不确定保存对象的个数,所以就引入了集合。(数组长度不可变)

集合:集合时一系列特殊的类,可以存储任意类型的对象,并且长度可变,统称为集合。

按存储结构分为单列集合Collection和双列集合Map.这是两个接口。

 

List接口

List接口继承自Collection接口,将实现了List接口的对象称为 list集合,list集合中允许出现重复元素。特点:是线性存储,通过索引访问指定元素,元素有序,存入顺序和取出顺序一致。

Arraylist集合

Arraylist是list接口的一个实现类,内部封装了一个长度可变的数组对象。

Arraylist的底层是使用一个数组来保存元素,增加或删除指定位置的元素会创建新的数组,效率低下,不适合做删改操作。通过索引访问元素很快捷,适合。

Jdk提供了一个Vector集合,它是List接口的实现类,用法和Arraylist完全相同,区别是Vector集合是线程安全的,Arraylist线程不安全。

Linkedlist集合

为了克服Arraylist集合删改效率低的问题,可以使用Linkedlist。集合内部维护了一个双向的循环链表,链表中的元素通过引用的方式连接前一个和后一个元素。

Iterator接口

为了遍历集合中的元素,jdk提供的接口。它同属于集合框架,和Collection、Map一个层级,但Collection、Map主要用于存储元素,而Iterator主要用于迭代访问Collection中的元素。

Iterator对象被称为迭代器。

注意:在使用Iterator迭代器对集合中的元素进行迭代时,如果调用了集合对象的Remove()方法删除元素,会报并发修改异常ConcurrentmodificationException。原因是集合中删除了元素导致迭代器预期的迭代次数发生改变,导致迭代结果不准确。

解决方式:用迭代器本身的remove()方法即可

Listerator接口

Iterator迭代器hasNext()和next()方法,实现集合中元素的迭代,迭代方向是从集合中的第一个元素向最后一个元素迭代,是正向迭代。Listerator中提供了hasPrevious()和previous()方法,实现反向迭代,还提供了add()方法来增加元素。

同样,遍历元素的时候如果想增加元素,只能用Listerator提供的add()方法,否则会报并发修改异常。Listerator迭代器只能用于list集合。

增强for循环和普通for循环的区别

①书写简洁

②自动遍历容器中每个元素

③只能访问容器中的元素,不能修改

set接口

Set接口中元素无序,不允许重复。

Set接口主要有两个实现类,Hashset和Treeset。

Hashset集合

Hashset集合保证不出现重复元素的原因:当HashSet集合的add() 。存入元素时,首先调用当前存入对象的hashCode()方法获取对象的哈希值,然后根据对象的哈希值计算出一个存储 位置,如果没有元素则直接存入,如果该位置有元素存在,则会调用equals()方法让当前存入的元素依次和该位置上的元素进行比较,返回false就将元素存入集合,true说明有重复元素,将该元素舍弃。

Treeset集合

Treeset集合内部采用自平衡的排序二叉树(存储的元素会按照大小排序,并能去除重复元素)来存储元素,这样的结构可以保证Treeset集合中没有重复的元素,并且可以对元素进行排序。

元素能够排序的原因:元素每次向Treeset集合中存入一个元素时,就会将该元素与其他元素进行比较,最后将它插入到有序的对象序列中。集合中的元素在进行比较时自动调用compareTo()方法,该方法是Comparable接口中定义的,要想对集合中的元素排序,必须实现Comparable接口。

Map接口

Map接口是一种双列集合,每个元素都包含一个键值对,键和值对象之间存在一种对应关系称为映射。

hashmap集合

hashMap集合是Map接口的一个实现类,用于存储键值映射关系,不能出现重复的键。

Map集合遍历方式

①首先调用Map对象的keySet()方法,获取存储Map中所有键的Set集合,然后通过Iterator迭代Set集合的每一个元素,最后通过调用get(String key)方法,根据键获取对应的值。

②首先调用Map对象的entrySet()方法获得存储在Map中所有映射的Set集合,这个集合中存放了Map.Entry类型的元素,每个Map.Entry对象代表Map中的一个键值对,然后迭代Set集合,获得每一个映射对象,分别调用映射对象的getKey()和getValue()方法获取键和值。

LinkedHashMap

HashMap集合迭代出来元素的顺序和存入的顺序不一样,如果想让顺序一致,可以使用LinkedHashMap类。

TreeMap集合

TreeMap集合是用来存储键值映射关系的,不允许出现重复的键。TreeMap是通过二叉树的原理来保证键的唯一性。

Properties集合

Properties主要用来存储字符串类型的键和值,在开发中,经常使用Properties集合来存取应用的配置项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值