A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


今天我们开始了集合的学习,请根据自己的理解回答下面问题:

1、集合和数组的区别?
答:集合不能存储基本数据类型,数组可以存储基本数据类型和引用数据类型。集合的长度是可以变动的
,而数组的长度是固定的,且需要在定义时给出。

2、什么是迭代器,什么是增强for,增强for和普通for循环的区别?
答:迭代器是集合通用的一个遍历访问集合元素的工具,其是一个接口。
增强for即是foreach循环,是对迭代器遍历的一种简化模式。foreach循环可以遍历数组和集合,
遍历集合时不能进行增删操作(底层就是迭代器)
for循环与foreach循环不同,其不能对遍历没有索引的类别的集合。

3、List接口下都有哪些集合,他们底层各自使用什么数据结构,有什么特点
答:List接口下有linkedList和ArrayList两个实现子类集合,前者的底层是链表,后者的底层实现是数组。
链表的结构是以节点组成的,通过指针,来逐个链接,所以链表没有索引,方便头尾操作,因为是通过指针进行
访问,所以对其增删操作高效快速,但进行查询则较数组慢。
数组的结构是一块连续的内存块,地址连续,通过索引访问,每次对数组进行增删操作,都会产生一个新
的数组,占用性能资源,其查询快,增删慢。
回复 使用道具 举报

今天我们继续了集合的学习,请根据自己的理解回答下面问题:

1.Set接口下的集合是如何保证无序不可重复的
答:Set集合通过add方法进行添加元素,其add()方法内部重写继承的Object超类中的hashCode()方法,是哈希值的
生成,加入了元素内容的影响,可以一定程度地根据其哈希值,就进行一些内容的判断。
在实际的哈希表中,其通过预先判断,哈希值与哈希表横向的数组长度的模于值,判断是否“同槽”,非同槽的元素,此时
即已可以判定他们元素的内容一定不想同,存入。
而哈希值判定 同槽的元素,再进一步的对同一槽内的元素(纵向,列)进行逐个equals判定。非相等的才存入。相等地舍弃。
由此实现了Set集合的元素不可重复特性。

2.我们为什么要重写HashCode( )和equals()方法?
答:在判定元素内容是否相等的步骤阶段中,重写equals方法,是为了实现,调用equals时,比较的时对象的内容,而非超类
原版的比较地址值。重写hashCode()方法,是为了在判定过程中,已健壮性来提高判断过程的效率,使用哈希值来预先一步判断
“不同槽的元素内容不重复”,可以直接存入。

3.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
答:先判断HashCode(),健壮性的考虑,先排除可以排除的情况,如短路效应,不必再继续判断已经可以确定的情况

4.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
答:Comparable使用时,是在类的定义时进行 实现该接口,,在类中实现其成员方法compareTo(),这种方案,在对象实例化时
已经对排序的正反向等进行了确定,不能再测试类中更改,耦合性高。它是默认进行排序的。
Comparator,使用是在测试类中,通过匿名内部类的方式,调用的时候,实时决定哪种排序的模式,是正序还是反序。使用更加灵活。

5.什么是泛型?使用泛型有什么好处?
答:在定义类、接口、方法时,指定的未知的数据类型
使用泛型,1,将异常从运行期变到了编译起;2,避免了强制转换类型的麻烦 ; 3 ,扩展了参数的范围,优化了需要多次重载的场景。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马