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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1、集合和数组的区别?
集合长度可变-->可以增删。 可以直接打印出所有元素
数组长度固定-->不可以增删、需要遍历才能打印所有元素,不能直接输出;

2、什么是迭代器,什么是增强for,增强for和普通for循环的区别?
迭代器是可以遍历没有索引值的集合,弥补for循环在遍历集合方面的不足。先判定集合中有没有元素,有就取出,直到集合中所有的元素都取出,这种取出方式就叫迭代。而迭代器就是用迭代方式取出元素的工具。从迭代的概念中就知道迭代器包含两种方法:判断是否存在下一个元素;取出当前下一个元素。
增强for是高级的for循环,专门用于遍历数组和集合的。要知道可以循环的东西是多种多样的,包括种种字符串,指定字符串,增强for就是放弃了其他能力,专注于遍历数组和集合。
增强for既可以用于有索引值的数组和集合,又可以用于没有索引值的数组和集合。它适用于单列集合和数组,它的底层是一个迭代器,因此在循环内不能进行增删元素。

3、什么是泛型?使用泛型有什么好处?
泛型是未知的数据类型。
好处:
1.当遇到未知的数据类型时,如果用object类,就会遇到想使用对象独有的方法时,需要进行数据类型转换的问题,而使用泛型可以避免这个麻烦;
2.一旦对泛型进行了限定后,如果输入的数据类型与限定的类型不符,编译器就会报错,把原本需要到运行期才会暴露的问题提到了编译器。




回复 使用道具 举报
李柏刚 发表于 2018-12-20 21:19
1、集合和数组的区别?
     集合长度可以改变,默认初始长度为10,会自动扩容,只能存储引用数据类型,使 ...

人都没来,作业做这么快。好孩子啊
回复 使用道具 举报
本帖最后由 洪烁铭 于 2018-12-21 19:03 编辑

普通for和增强for的一个重要区别是普通for有索引值,它依靠索引值来遍历。而增强for本质上是迭代器,可以用于无索引值的集合遍历。在理解了增强for是个迭代器的基础上,就知道它在循环时是不能进行增删的。
回复 使用道具 举报
1.List接口下都有哪些集合,他们各自有什么特点list接口下有ArrayList、LinkedList、Vector。ArrayList的底层数据结构是数组,它具有的特点是增删难,查询快;LinkedList的底层数据结构是链表,它具有的特点是:增删快,查询慢。vector具有线程安全、效率低的特点。他们的共同特点是有序;可重复,有索引值

2.Set接口下的集合是如何保证无序不可重复的
通过重写hashCode方法得到对象内容的哈希值,判断元素的哈希值是否相同,如果不同,直接存入;如果相同,需要进一步通过重写的equals方法来进行判断,(因为存在哈希值的算法里可能存在哈希值相同,内容不同的情况)。如果equals判断结果为真,说明内容相同,就是重复元素,不储存;如果为假,则链接在原来元素后面。

3.我们为什么要重写HashCode( )和equals()方法?
不重写时,默认得到的是对象的地址值。这不是我们要的。而重写后能够进行内容的判断,以此来去重。

4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
判断hashCode,因为通过哈希值来判断,效率高。进一步说,是因为哈希表是一个数组+链表\数组+红黑树的组合数据结构,所以具有查询效率特别高的特点。对比之下,用equals,效率太低。所以通过一个高效不够严谨的hashCode进行快速筛选,剩余部分,再通过equals来进行内容判断,达到高效又准确的去重效果。

5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法
被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现
此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中
的键或有序集合中的元素,无需指定比较器
Comparator强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或
Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或
有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马