Collection集合的用法

数组的特点
1.初始化后,长度就确定了
2.数组一旦定义好,其元素的类型也就确定了
数组的缺点
1.初始化后,长度就确定了
2.数组提供的方法非常有限,对于添加,删除,插入数据等操作,非常不便,同时效率不高
3.获取数组中实际元素的需求,数组没有现成的属性或方法可用
4数组存储数据的特点,有序,可重复,对于无序,不可重复的需求,不能满足(集合)

集合
一.Collection与Map(映射)
Collection
包含List与Set
在这里插入图片描述
Map
在这里插入图片描述

Colletion:单列集合,用来存储一个一个的对象
------List接口:存储有序的,可重复的数据------------>"动态"数组
---------------ArrayList,LinkedList, (Vector)
------Set接口:存储无序的,不可重复的数据---------->高中的“集合”
----------------------HashSet,LinkedHashSet,TreeSet

Map接口:双列集合,用来存储一对(Key-value)一对的数据---------------->高中函数y=f(x)

--------------- HashMap.LinkedHashMap,TreeMap,Hashtable,Properties
二 Collecton的方法
方法
1.add(Object e)与add all
在这里插入图片描述
2.isEmpty() 判断是否为空
3.clear():清空集合元素
4.contains(Object obj)判断当前集合中是否包含obj
coll.add(new Person(“Jerry”))
coll.contains(new Person(“Jerry”))//false
注意:
我们在判断时会调用obj对象所在类的equals(),所以在
Collection接口的自定义实现类的对象中添加数据obj,要求obj所在类要

5.contains(Collection coll)判断coll中的所有元素是否在当前集合中
6.remove(Object obj)
7removeAll(Collection coll)
8.retainAll(Collection coll):交集,获取当前集合和coll集合的交集
9.equals 要想返回true,需要当前集合和形参集合的元素都相同
我们在判断时会调用obj对象所在类的equals(),所以在
Collection接口的自定义实现类的对象中添加数据obj,要求obj所在类要

10 hashcode ():返回当前对象的哈希值
coll.hashcode ()
11.集合----->数组 toArray
Object[] arr=coll.toArray
数组转化为集合
List list=Arrays.asList(new String[]{“AA”,“BB”})

12 iterator():返回iterator的实例,用于遍历集合元素
iterator 访问一个容器的各个元素,而又不暴露对象细节;
Collection接口继承了 java.lang.Iterable接口;
集合元素每次调用iterator方法都会得到一个全新的迭代器对象
在这里插入图片描述
一般使用
while(iterator.hasNext()){
System.out.println(iterator.next());
}

在这里插入图片描述
在这里插入图片描述
相当于一个循环指针移动了两次
在这里插入图片描述
死循环,由于每次判断条件都会生成一个新的迭代器对象
remove操作
在这里插入图片描述
iterator主要用于遍历Collection而不是Map
13.foreach
在这里插入图片描述
三 .Collection接口子接口之一 List接口
面试题:ArrayList,LinkedList,Vector的异同
同:三者都实现了List接口,存储数据的特点相同,存储有序,可重复
不同
在这里插入图片描述
ArrayList
在这里插入图片描述
jdk 7
空参初始容量为10(联想StringBuffer空参初始16);

若添加到这底层elementData数组容量不够,则扩容
默认情况下,扩容为原来的容量的1.5倍,同时需要将原有数组的数据
复制到新的数组;

结论:建议开发中使用带参的构造器
ArrayList list=new ArrayList(int capacity);

jdk 8
初始时
ArrayList list =new ArrayList();开始并没有给容量
第一次添加操作,底层才创建长度为10的数组;

后续添加扩容与JDK 7一样

总结:jdk7—类似饿汉式
jdk8—类似懒汉式

Vector:Jdk7 与Jdk8 通过Vector()创建对象时,底层都创建了长度为10的数组;
扩容方面,默认扩容为原来数组长度的2倍;
三.List接口的常用方法
在这里插入图片描述
常用方法
增:add(Object obj)
删:remove(int index)/remove(Object obj)
改:set(int index,Object ele)
查:get(int index)
插:add(int index,Object ele)
长度:size()
遍历:1 iterator
2 foreach
3.普通循环
四.Set接口
在这里插入图片描述
Set接口中没有额外定义的新的方法,使用的都是Collection的方法
1.无序性
不等于随机性,存储的数据在底层数据中并非按照数组索引的顺序添加
而是按照数据的哈希值
2.不可重复性
保证添加的元素按照equals()判断时,不能返回true,相同元素只能添加一个
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.要求:
向Set中添加数据,其所在类一定要重写hashCode()和equals()
重写的hashCode()和equals()尽可能保持一致性
一致性:就是相等的对象具有相同的散列码
重写两个方法的小技巧:对象用作equals方法比较的field,都用作
计算hashCode
在这里插入图片描述
HashSet底层实现是Hashmap

LinkedHashSet
//在添加数据的同时,每个数据还维护了两个引用,记录数据的前一个数据和后一个数据
//优点:对于频繁的遍历操作,LinkedHashSet的效率高于HashSet
TreeSet
1.向TreeSet中添加的数据,要求是相同类的对象
2.两种排序方式:自然排序,定制排序
Comparable自然排序
在这里插入图片描述
3.自然排序,比较两个对象是否相同的标准,compareTo()返回0
不再是equals()
4定制排序 比较两个对象是否相同的标准,compare()返回0
不再是equals()
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值