Java集合概念
2017-09-13 18:12
176 查看
1、Collection
和 Collections的区别
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、 排序、线程安全化等操作。
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
2、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
是用==还是equals()?
它们有何区别
用equals()来区分,
==是用来判断两者是否是同一对象(同一事物),而equals是用来判断是否引用同一个对象。再看一下Set里面存的是
对象,还是对象的引用。根据Java的存储机制可知,set里面存放的是对象的引用,所以当两个元素只要满足了equals()时就已经指向同一个对象,
也就出现了重复元素。所以应该用equals()来判断。
3、List, Set, Map是否继承自Collection接口
List,Set是,Map不是。
Map是键值对映射容器,是双列集合。与List和Set有明显的区别,他们都是单列集合,而Set存储的零散的元素不允许有重复的元素,List是线性结构的容器,适用于按数值索引访问元素的情形。
4、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对
(1) equals() 和 hashCode() 是2个不同的方法,要实现 "(x.equals(y) == true),但却可有不同的hash code" 是能做到的。
(2) 但这样做非常不好。在 Hashtable 中是这样使用 equals() 和 hashCode() 的:get 和 put 时,首先使用 hashCode() 进行在 keys 中定位和查找,这样会提高查找效率。如果现有多个 key 的 hashCode 相同,再用 equals 在具有相同 hashCode 的这几个 key 中进行依次查找。
也就是说,java 中的设计思想是:允许不同对象有相同的 hashCode(),但是 equal 的对象的 hashCode 肯定是相同的。equals() 在 java 中被认为:对象之间 "一模一样"。
5、说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
6、HashMap和Hashtable的区别
HashMap是Hashtable他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
7、ArrayList和Vector的区别,HashMap和Hashtable的区别
(1)Vector是多线程安全的,而ArrayList不是,这个可以从源码中看出,Vector类中的方法很多有synchronized进行修饰,这样就导致了Vector在效率上无法与ArrayList相比;
(2)两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是不同的,很多网友说Vector增加原来空间的一倍,ArrayList增加原来空间的50%,其实也差不多是这个意思,不过还有一点点问题可以从源码中看出,一会儿从源码中分析。
(3)Vector可以设置增长因子,而ArrayList不可以,最开始看这个的时候,我没理解什么是增量因子,不过通过对比一下两个源码理解了这个,先看看两个类的构造方法:
HashMap是Hashtable他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
和 Collections的区别
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、 排序、线程安全化等操作。
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
2、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
是用==还是equals()?
它们有何区别
用equals()来区分,
==是用来判断两者是否是同一对象(同一事物),而equals是用来判断是否引用同一个对象。再看一下Set里面存的是
对象,还是对象的引用。根据Java的存储机制可知,set里面存放的是对象的引用,所以当两个元素只要满足了equals()时就已经指向同一个对象,
也就出现了重复元素。所以应该用equals()来判断。
3、List, Set, Map是否继承自Collection接口
List,Set是,Map不是。
Map是键值对映射容器,是双列集合。与List和Set有明显的区别,他们都是单列集合,而Set存储的零散的元素不允许有重复的元素,List是线性结构的容器,适用于按数值索引访问元素的情形。
4、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对
(1) equals() 和 hashCode() 是2个不同的方法,要实现 "(x.equals(y) == true),但却可有不同的hash code" 是能做到的。
(2) 但这样做非常不好。在 Hashtable 中是这样使用 equals() 和 hashCode() 的:get 和 put 时,首先使用 hashCode() 进行在 keys 中定位和查找,这样会提高查找效率。如果现有多个 key 的 hashCode 相同,再用 equals 在具有相同 hashCode 的这几个 key 中进行依次查找。
也就是说,java 中的设计思想是:允许不同对象有相同的 hashCode(),但是 equal 的对象的 hashCode 肯定是相同的。equals() 在 java 中被认为:对象之间 "一模一样"。
5、说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
6、HashMap和Hashtable的区别
HashMap是Hashtable他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
7、ArrayList和Vector的区别,HashMap和Hashtable的区别
(1)Vector是多线程安全的,而ArrayList不是,这个可以从源码中看出,Vector类中的方法很多有synchronized进行修饰,这样就导致了Vector在效率上无法与ArrayList相比;
(2)两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是不同的,很多网友说Vector增加原来空间的一倍,ArrayList增加原来空间的50%,其实也差不多是这个意思,不过还有一点点问题可以从源码中看出,一会儿从源码中分析。
(3)Vector可以设置增长因子,而ArrayList不可以,最开始看这个的时候,我没理解什么是增量因子,不过通过对比一下两个源码理解了这个,先看看两个类的构造方法:
HashMap是Hashtable他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
相关文章推荐
- Java基本概念:集合类(Collection)List/Set/Map的区别和联系
- java中集合框架的基本概念整理
- Java集合---Hash概念
- 疯狂Java学习笔记(33)----------java集合概念和作用
- Java 集合:HashSet,HashTable,以及 ConcurrentHashMap 概念
- java基础学习之集合概念总结
- 黑马程序员--读写字节数组,随机读写流,集合IO的思维导图,多线程部分,单例设计模式,线程和进程的概念,Java中的线程的创建方式,线程的随机性,线程的状态图,多线程操作共享数据的安全性,死锁
- java集合概念初步介绍
- JAVA集合使用——基本概念
- Java基本概念-集合框架
- Java集合基本概念及元素添加
- java 集合框架--基本概念
- JAVA集合概念
- JAVA中的集合的概念
- Java学习笔记(33)----------java集合概念和作用
- Java 集合:Map 系列(ConcurrentHashMap概念)
- Java编程思想-集合基本概念
- 『黑马程序员』---java--集合--Collection概念+List派系
- 疯狂Java学习笔记(33)----------java集合概念和作用
- 牛客网Java刷题知识点之泛型概念的提出、什么是泛型、泛型在集合中的应用、泛型类、泛型方法、泛型接口、泛型限定上限、泛型限定下限、 什么时候使用上限?泛型限定通配符的体现