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

© fzc123 中级黑马   /  2016-7-26 20:16  /  332 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

四、集合
94.简述集合体系?
答:集合分为单列集合和双列集合。
单列集合的顶层是Collection接口,包括List和Set集合。双列集合的顶层接口是Map。我们先来说下单列集合:
(1.1)List集合的特点是元素可重复,有序,有索引,能够有角标操作集合,有特有的迭代方式ListIterator。包括ArrayList、LinkedList和Vector。
ArrayList集合底层采用的是数组数据结构,查询速度比较快,因为数组有索引,在内存中分配的空间是连续的,但是增删比较慢。线程不同步,效率高。初始容量为10。
LinkedList集合的底层采用的是链表数据结构,增删速度比较快,查询速度比较慢。线程不同步。
Vector底层数据结构也是数组数据结构,但是线程同步,效率低,特有取出元素的方式是枚举。因为效率低,逐步被ArrayList替代。
(1.2) Set集合的特点元素是无序的(存入和取出的顺序不一致),元素不可以重复。包括HashSet和TreeSet。
    HashSet的底层数据结构是哈希表,线程不同步,效率高。保证元素的唯一性额有的依据是元素的hashCode和equals方法。如果hashCode不同,不调用equals方法。如果hashCode相同,才会调用equals方法判断元素是否相同。
    TreeSet的底层数据结构是二叉树,线程不同步,效率高。能够给元素进行排序。保证元素唯一性的依据是compareTo和return0。排序的两种方式:第一种元素自身实现Comparable接口,重写compareTo()方法。这种排序方式叫元素的自热排序,也叫默认排序。第二种是当元素自身不具备比较性或者具备的比较性不是所需要的,这时就让集合自身具备比较性,当集合初始化时就有了比较性。定义一个比较器实现Comparator接口,重写compare方法,定义集合的时候将比较器作为参数传递给TreeSet的构造函数,这样集合就具有了比较性。
(2)Map是双列集合的顶层接口,该集合存储的是键值对,一对一对的往里存,而且要保证键的唯一性。包括Hashtable、HashMap、TreeMap。
    Hashtable的底层数据结构是哈希表,不可以存储null键和null值,线程同步,效率低。JDK1.0.
    HashMap的底层数据结构是哈希表,可以存储null键和null值,线程不同步,将Hashtable替代,JDK1.2效率高。保证键的唯一性的 依据是hashCode和equals方法。
    TreeMap的底层数据结构是二叉树,线程不安全,能够给集合中的键排序。
95.什么时候使用什么集合?
答:(1)首先要看是单列还是双列,是单列的话就用Collection,双列就用Map。
(2)要是单列的话看元素是不是要求重复,元素重复的话使用List,看查询多还是增删多,查询多的话用ArrayList,增删多的话用LinkedList,不确定的话用ArrayList。不重复的话使用Set,看是否要求排序,排序的话用TreeSet,不需要排序用HashSet。不确定的话用HashSet。
(3)要是双列的话,看是否要求排序,要求排序用TreeMap,不要求排序用HashMap,不确定的话用HashMap。
96.Collection(单列)和(Map)双列的区别?
答:Collection是单列集合,Map是双列集合。Map的键是唯一的,Collection体系中的Set集合中的元素是唯一的。Map集合的数据结构针对键有效,Collection的底层数据结构针对元素有效。
100.遍历集合的方式有哪些?
答:遍历List集合的方式有普通for、增强for、迭代器Iterator、列表迭代器ListIterator。
遍历Set集合的方式有增强for、迭代器Iterator。
遍历map集合的方式有keySet(),entrySet()。然后通过增强for、迭代器Iterator遍历。
101.用迭代器和增强for遍历集合,能否用集合的方法操作集合?
答:不能,会出现并发修改异常,ConcurrentModificationException。
并发修改异常就是在用普通迭代器的时候用集合的方法增加、删除元素。可以用列表迭代器。
102.泛型是什么?有什么好处?
答:泛型是泛指某种类型,是JDK1.5出现的新特性,用于解决安全问题,是一种类型安全机制。
好处:(1)将运行时期会可能出现的异常转移到编译期(2)提高了安全性。(3)避免了强制类型转换的麻烦。4、优化程序设计。
103、向上限定和向下限定?
? super E:  E、E的父类,固定下边界,向上限定。
? extends E: E、E的子类  固定的上边界,向下限定。
104.字典排序,自然排序和比较器排序是什么?
答:字典排序按照字典上的顺序升序排序。 A-Z
    自然排序是对强制对实现Comparable接口的类进行排序,实现Comparable接口,重写compareTo()方法,根据返回值进行排序。
    比较器排序是实现Comparator接口,重写compare()方法,根据返回值进行排序。
106.Map有哪些取出元素的方式?原理是什么?
答:根据键获取其对应的值。通过keySet()和get(Key)方法结合实现。
根据键值对获取其对应的键和值。通过entrySet()和getKey(),getValue()方法结合实现。
107.Collections 和 collection的区别?
答:Collections是用来操作单列集合的工具类,里边定义了一些常用的操作单列集合的方法;而collection是单列集合的顶层接口,里边定义了单列集合的共性内容。
108
*栈和队列:
队列结构:先进先出的规则
栈结构:先进后出规则
*链表和数组的区别:
数组:一块连续的存储区域,每个元素都有编号,编号是从0开始的。特点是查询快。
链表结构:每个元素指向下一个元素.特点是:增删快。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马