集合和数组的比较(为什么引入集合)
数组不是面向对象的,存在明显的缺陷,集合完全弥补了数组的一些缺点,比数组更灵活更实用,可大大提高软件的开发效率而且不同的集合框架类可适用于不同场合。具体如下:
1)数组的效率高于集合类.
2)数组能存放基本数据类型和对象,而集合类中只能放对象。
3)数组容量固定且无法动态改变,集合类容量动态改变。
4)数组无法判断其中实际存有多少元素,length只告诉了array的容量。
5)集合有多种实现方式和不同的适用场合,而不像数组仅采用顺序表方式。
6)集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性调用即可实现各种复杂操作,大大提高软件的开发效率。
200.Collection和Collections的区别
1)Collection是Java提供的集合接口,存储一组不唯一,无序的对象。它有两个子接口List和Set。
2)Java中还有一个Collections类,专门用来操作集合类 ,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
下列说法正确的有()(选择一项)
A. | LinkedList继承自List |
B. | AbstractSet继承自Set |
C. | HashSet继承自AbstractSet |
D. | TreeMap继承自HashMap |
答案: C 分析:A:LinkedList实现List接口 B:AbstractSet实现Set接口 D:TreeMap继承AbstractMap |
Java的HashMap和Hashtable有什么区别HashSet和HashMap有什么区别?使用这些结构保存的数需要重载的方法是哪些?
答:HashMap与Hashtable实现原理相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用
两者的主要区别如下
1、Hashtable是早期JDK提供的接口,HashMap是新版JDK提供的接口
2、Hashtable继承Dictionary类,HashMap实现Map接口
3、Hashtable线程安全,HashMap线程非安全
4、Hashtable不允许null值,HashMap允许null值
HashSet与HashMap的区别
1、HashSet底层是采用HashMap实现的。HashSet 的实现比较简单,HashSet 的绝大部分方法都是通过调用 HashMap 的方法来实现的,因此 HashSet 和 HashMap 两个集合在实现本质上是相同的。
2、HashMap的key就是放进HashSet中对象,value是Object类型的。
3、当调用HashSet的add方法时,实际上是向HashMap中增加了一行(key-value对),该行的key就是向HashSet增加的那个对象,该行的value就是一个Object类型的常量
列出Java中的集合类层次结构?
答:Java中集合主要分为两种:Collection和Map。Collection是List和Set接口的父接口;ArrayList和LinkedList是List的实现类;HashSet和TreeSet是Set的实现类;LinkedHashSet是HashSet的子类。HashMap和TreeMap是Map的实现类;LinkedHashMap是HashMap的子类。
图中:虚线框中为接口,实线框中为类。
List,Set,Map各有什么特点
答:List 接口存储一组不唯一,有序(插入顺序)的对象。
Set 接口存储一组唯一,无序的对象。
Map接口存储一组键值对象,提供key到value的映射。key无序,唯一。value不要求有序,允许重复。(如果只使用key存储,而不使用value,那就是Set)。
ArrayList list=new ArrayList(20);中的list扩充几次()
A. | 0 |
B. | 1 |
C. | 2 |
D. | 3 |
答案:A 分析:已经指定了长度, 所以不扩容 |
List、Set、Map哪个继承自Collection接口,一下说法正确的是()
A. | List Map |
B. | Set Map |
C. | List Set |
D. | List Map Set |
答案:C 分析:Map接口继承了java.lang.Object类,但没有实现任何接口. |
合并两个有序的链表
|
用递归方式实现链表的转置。
|
给定一个不包含相同元素的整数集合,nums,返回所有可能的子集集合。解答中集合不能包含重复的子集。
|
以下结构中,哪个具有同步功能()
A. | HashMap |
B. | ConcurrentHashMap |
C. | WeakHashMap |
D. | TreeMap |
答案:B 分析: A,C,D都线程不安全,B线程安全,具有同步功能 |
以下结构中,插入性能最高的是()
A. | ArrayList |
B. | Linkedlist |
C. | tor |
D. | Collection |
答案:B 分析: 数组插入、删除效率差,排除A tor不是java里面的数据结构,是一种网络路由技术;因此排除C Collection 是集合的接口,不是某种数据结构;因此排除D |
以下结构中,哪个最适合当作stack使用()
A. | LinkedHashMap |
B. | LinkedHashSet |
C. | LinkedList |
LinkedList 分析: Stack是先进后出的线性结构;所以链表比较合适;不需要散列表的数据结构 |
Map的实现类中,哪些是有序的,哪些是无序的,有序的是如何保证其有序性,你觉得哪个有序性性能更高,你有没有更好或者更高效的实现方式?
答:1. Map的实现类有HashMap,LinkedHashMap,TreeMap
2. HashMap是有无序的,LinkedHashMap和TreeMap都是有序的(LinkedHashMap记录了添加数据的顺序;TreeMap默认是自然升序)
3. LinkedHashMap底层存储结构是哈希表+链表,链表记录了添加数据的顺序
4. TreeMap底层存储结构是二叉树,二叉树的中序遍历保证了数据的有序性
5. LinkedHashMap有序性能比较高,因为底层数据存储结构采用的哈希表
下面的代码在绝大部分时间内都运行得很正常,请问什么情况下会出现问题?根源在哪里?
|
答:将if( list.size() <= 0 )改成:while( list.size() <= 0 )