java集合常见面试题目,java集合面试题总结及答案
如何解决写爬虫IP受阻的问题?立即使用。
ArrayList和Vector的区别
这两个类都实现了List接口(List接口继承了Collection接口)。它们都是有序集合,即这两个集合中存储的元素位置都是有序的,相当于一个动态数组。以后我们可以根据位置索引号取一个元素,里面的数据是允许重复的。(推荐学习:java面试题目)
这是与HashSet等集合最大的区别,HashSet不能按索引号检索其元素,也不允许重复元素。
ArrayList与Vector的区别主要包括两个方面:.
(1)同步:
Vector是线程安全的,也就是说它的方法是线程同步的,而ArrayList是线程不安全的,它的方法是线程异步的。
如果只有一个线程会访问集合,那么最好使用ArrayList,因为它不考虑线程安全,效率会更高;如果多个线程将访问集合,最好使用Vector,因为我们不需要自己考虑和编写线程安全的代码。
(2)数据增长:
ArrayList和Vector都有初始容量。当其中存储的元素数量超过容量时,就需要增加ArrayList和Vector的存储空间。每次要增加存储空间,不要只增加一个存储单元,要增加几个存储单元。每次增加的存储单元数量要在内存空间的利用率和程序的效率之间达到一定的平衡。
Vector默认是翻倍的,而ArrayList的增长策略在文档中并没有规定(从源代码来看是增加了1.5倍)。
ArrayList和Vector都可以设置初始空间大小,Vector也可以设置增加的空间大小,而ArrayList没有提供设置增加的空间的方法。
总结:Vector翻倍,ArrayList增长0.5倍。
HashMap和Hashtable的区别
HashMap是Hashtable的轻量级实现(非线程安全实现)。他们都完成了地图界面。主要区别在于HashMap允许空键值。由于非线程安全性,当只有一个线程访问它时,它比Hashtable更有效。
HashMap允许null作为条目的键或值,但是Hashtable不允许。
HashMap移除了Hashtable的contains方法,将其更改为containsvalue和containsKey。因为contains方法具有误导性。
Hashtable继承自Dictionary类,HashMap是Java1.2引入的Map接口的实现。
最大的区别是Hashtable的方法是同步的,而HashMap不是。多线程访问Hashtable时,不需要自己同步它的方法,但是HashMap必须为它们提供同步。
就HashMap与HashTable主要从三方面来说。
1.历史原因:Hashtable基于过时的Dictionary类,HashMap是Java 1.2引入的Map接口的实现。
2.同步:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程不安全的,不是同步的。
3.value:只有HashMap允许使用null值作为表条目的键或值。
List和 Map区别?
一个是存储单列数据的集合,另一个是存储键和值等双列数据的集合。列表中存储的数据是有序的,并且允许重复;存储在Map中的数据是无序的,它的键不能重复,它的值可以重复。
List,Set, Map是否继承自Collection接口?
列表,集合是,映射不是
List、Map、Set三个接口,存取元素时,各有什么特点?
(这种题型是从两个方面来对比考试水平的:一是真正理解这些内容,二是有很强的概括和表达能力。)
首先,List类似于Set。它们都是单列元素的集合,因此它们有一个公共的父接口,称为Collection。
集合中不允许有重复的元素,也就是不能有两个相等(注意,不仅仅是相同)的对象,也就是假设集合中有一个A对象,现在我想把另一个B对象存入集合,但是如果B对象等于A对象,那么B对象就不能存储。
因此,集合Set的add方法有一个布尔返回值,当集合中没有元素并且add方法可以成功联接该元素时,返回true。当集合包含的元素等于元素等于时,add方法无法联接该元素,返回结果为false。获取Set元素时,不能指定获取哪一个。只能通过迭代器接口获取所有元素,然后逐个遍历每个元素。
列表是指按顺序排列的集合。注意不是按年龄大小价格等排序。当我们多次调用add(Obje)方法时,我们每次加入的对象都是按照先到先得的顺序排序的,就像火车站买票有排队顺序一样。
有时候可以插队,也就是调用add(intindex,Obj e)方法,可以指定当前对象在集合中的存储位置。
一个对象可以重复存储在列表中。每次调用add方法时,对象都会被插入到集合中一次。事实上,不是将对象本身存储到集合中,而是使用一个索引变量指向集合中的对象。多次添加对象时,相当于集合中有多个索引指向该对象。
除了使用迭代器接口获取列表中的所有元素,然后逐个遍历每个元素,还可以调用get(index i)来指定取哪个。
与maplist和Set不同,它是两列的集合,其中有put方法,定义如下:put(obj key,obj value)。每次存储都要存储一对键/值,不能存储重复的键。这个重复的规则等于等于。那么就可以根据key得到对应的值,即get(Object key)的返回值就是key对应的值。
另外还可以得到所有键的组合,所有值的组合,以及Map的集合。由键和值组成的条目对象。
List以特定的顺序保存元素,可能会有重复的元素。集合不能有重复的元素,内部排序。保存Map key-value的值,可以是多值的。
说出ArrayList,Vector,LinkedList的存储性能和特性
ArrayList和Vector都使用数组来存储数据。为了添加和插入元素,该数组中的元素数量大于实际存储的数据。它们都允许通过序号直接索引元素,但是插入元素涉及到内存操作,比如数组元素移动,所以索引数据很快,插入数据很慢。由于使用了同步方法(线程安全),Vector的性能通常比ArrayList差。
LinkedList使用双向链表实现存储。按序列号索引数据需要向前或向后遍历,因此索引变得较慢。但是在插入数据时,只需要记录这个条目的前后条目,所以插入速度更快。
LinkedList也是线程不安全的。LinkedList提供了一些可以用作堆栈和队列的方法。
去掉一个Vector集合中重复的元素
向量new Vector=new Vector();
for(int I=0;I vector . size();我)
{
object obj=vector . get(I);
如果(!new vector . contains(obj);
new vector . add(obj);
}还有一种简单的方法来利用Set不允许重复元素的事实:
HashSet set=new HashSet(vector);Collection和Collections的区别。
它是集合类的上级接口,继承它的接口主要是Set和List。
Collections是collection类的帮助类。它提供了一系列静态方法来对各种集合进行搜索、排序、线程安全和其他操作。
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?
集合中的元素不能重复,元素是否重复用equals()方法判断。
==和equal区别也是考烂了的题,这里说一下:
==运算符专门用来比较两个变量的值是否相等,即比较变量对应的内存中存储的值是否相同。要比较两个基本类型的数据或两个引用变量是否相等,只能使用==运算符。
Equals方法用于比较两个独立对象的内容是否相同,就像比较两个人是否长得一样。它比较的两个对象是独立的。
比如两个new语句创建两个对象,然后用两个变量A/B指向其中一个,这是两个不同的对象,它们的第一个地址不一样,也就是A和B中存储的值不一样。因此,表达式a==b将返回false,而这两个对象中的内容是相同的,因此表达式a.equals(b)将返回true。
你所知道的集合类都有哪些?主要方法?
最常用的集合类是List和Map。List的具体实现有ArrayList和Vector,都是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List适合通过数字索引访问元素。
Map提供了一种更通用的元素存储方法。Map类用于存储成对的元素(称为“键”和“值”),其中每个键都映射到一个值。
它们都有添加、删除和搜索的方法。
对于set,一般的方法有add、remove、contains等。
对于map,一般的方法有put、remove、contains等。
List类会有get(int index)这样的方法,因为它可以按顺序取元素,但是set类中没有get(int index)这样的方法。List和set都可以遍历所有元素,必须先获取一个迭代器对象。因此,set和list类都有一个迭代器方法来返回迭代器对象。
Map可以返回三个集合,一个是所有键的集合,一个是所有值的集合,一个是由返回的键和值组成的EntrySet对象的集合。map还有一个get方法,参数是key,返回值是key对应的值。这是自由发挥,不是背方法的能力。这些编程过程中会有提示。就根据他们的不同来说说用法吧。这就是java面试题目的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。