当前位置:首页 > 集合面试题
###1.请讲下Java里面的容器 分两大类,Map和Collection。而Collection又有子接口List (数据存储顺序和插入顺序是一样的)、Set(里面的元素具有唯一性) Map是存储键值对的,里面的健不可以重复,但值可以重复 List主要有ArrayList和LinkedList两种实现。实现的数据结构不同, 所以主要的区别也都是和数据结构相关的。 ArrayList基于数组,随机访问快, 而对于中间元素的插入删除效率比较低,而且需要考虑扩容问题。 LinkedList,则 基于链表,和ArrayList提到的正相反,随机访问慢, 但对于中间元素的插入和删除更有效率。 Set也是一种Collection,和List比起来主要体现在元素唯一性。
###2.请说下Iterator的作用
迭代器可以实现Collection接口的方法,可以一个一个地获取集合中的元素 特性:在遍历集合时 可判断是否有下一个元素
###3.说下ArrayList和LinkedList的区别和联系,并说明什么情况下用它们 区别:ArrayList用于对象的随机访问速度快,没有顺序 LinkedList实现机制是链表式的,和顺序有关,速度比ArrayList慢 --->联系:ArrayList和LinkedList都是List接口的实现类 当要快速获取一个值时,用ArrayList,用于顺序插入操作时,用LinkedList.
###4.说下List,Set,Map三种集合各有什么特征 List集合中的元素可以重复, Set集合中的元素不可以重复 Map集合用键-值映射存放对象,Map容器中的键对象不能重复,值对象可以重复
###5.HashSet和TreeSet有什么区别,什么时候用它们
区别:HashSet中的元素不能重复,没有顺序 TreeSet中的元素不能重复,但有顺序 当集合中的元素需要排序时,用TreeSet 一般情况下用HashSet,因为不需要排序,速度比TreeSet快
###6.什么是泛型,怎么使用的,有什么好处? 答案 泛型又分为:方法泛型和类泛型。 定义一个集合时,可以知道里面定义的是什么类型 使用:在集合类型后面加< 数据类型 > 使用泛型后,从集合中取得元素后就不用再用强转
###7.什么是for each循环,它可以循环那些数据类型 答案
通过对象拿到集合里的值 可以用来循环集合和数组
###8.写一个for each循环看看 for(Object object : list){ System.out.println(object); }
###9. 什么是强转怎么写的,有什么优缺点,一般要多用还是少用,为什么?
一般在继承的基础上用.
Person person=new Student();
Student student=(Student)person;
把运行期的强转为编译期的.
编译期不会出错.运行期容易出错.所以一般少用
###10.HashMap和Hashtable有什么区别,一 般情况下常用那个? HashMap的键-值都可以为空(null) Hashtable的键-值都不可以为空(null),线程安全 , 一般情况下用HashMap
###11.Hashtable名字为什么没有驼峰命名 Hashtable的由来比较古老,当时还没有命名规范
###12.Collections和Collection有什么区别 Collections是一个工具类,可以直接调用List和Set的方法 Collection是一个接口,是List和Set集合的父接口
###13.写出Collections的6个方法,并详细解释 sort():对集合进行排序
shuffle():打乱集合中的元素顺序 addAll():将一个集合添加到另一个集合中 max():判断集合中的最大值 min():判断集合中的最小值 copy():将一个集合中的元素复制到另一个集合中去 fill():将一个集合中的元素全部替换成指定的元素
###14.Arrays类是做什么的,写出它的常用6个方法
Arrays是数组的一个工具类 sort():对数组进行排序 binarySearch():搜索数组指定元素的下标 copyOf():复制数组中指定长度的元素 deepEquals():比较两个数组的深度 fill():把数组中的所有元素替换成指定元素 equals():比较指定两个数组的元素是否相等 hashcode():将指定数组的指定范围复制到一个新数组。
###15.比较下集合和数组的优缺点
集合是多个对象的容器,可以将不同数据类型的多个对象组织在一起 数组类型是有相同数据类型的数据集合,数组是很多语言都支持的底层数据结构,性能上是最高的
###16.如何对一个对象排序,有几种方法 把对象放入List集合中,用Collections工具类调用sort()方法进行排序, 但是这个类必须实现Compareble接口才行 把对象放在Set集合中,用TreeSet()实现类对集合直接排序
###17.在集合里面怎么判断两个对象相等,要实现什么方法 重写equals方法
###18.怎么样把集合转化成数组,或把数组转化为集合 把集合转为数组,可以用toArray()方法 把数组转为集合时, for each循坏,先把数组中的元素转为String型,再放到集合里
###19.分别写出List,Set,Map里面的5个常用方法 List: add()新增 clear()清除 contains()判断是否包含某个元素
indexOf()一个元素在集合中首次出现的位置 set()把指定下标的元素替换成自定义元素 Set: add()新增 clear()清除 contains()判断是否包含某个元素 remove():把集合中指定下标的元素删掉 size():返回集合长度 Map: containsKey()是否包含指定key containsValue()是否包含指定value keySet()返回所有key put()添加元素 Remove()移除
###20.HashMap与LinkedHashMap,和TreeMap的区别。 共同点:HashMap,LinkedHashMap,TreeMap都属于Map的实现类. 不同点: 1.HashMap里面存入的键值对在取出的时候是随机的, TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。 LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现.
###21.HashMap怎么实现有序 可以转化放入TreeMap里面,或者把key放入LinkedList里面。
###22.在List里面怎么去掉重复的数?
通过把List里面的数据放入HashSet可以去除重复
###23.在List里面有几种排序? 答:两种:实现Comparable
###24.说一下链表跟数组的区别 链表:用一组任意储存单元存放线性表的数据元素,并且通过指针链相接结点的序列称为链表。 是一种常见的数据组织形式,它采用了动态分配内存的形式实现。 需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放, 不会造成内存空间的浪费。不靠数组实现,没有下标。 数组必须事先定义固定的长度,不能适应数据动态增减的情况。当数据增加时, 可能超出原先定义的元素个数;当数据减少时,造成数据浪费。在使用的时候还要数组初始化, 注意数组的下标越界。
###25.HashSet的理解 HashSet实现了Set接口,HashSet不保证集合的迭代顺序,允许使用Null元素。
共分享92篇相关文档