2.容器

18.java 容器都有哪些?

java中的容器包括,List,set,map。其中list是有序的,元素可重复,实现包括LinkList和ArrayList。而Set是无序的,不可重复的,实现包括HashSet和TreeSet。map是无序可重复的,实现包括HashMap和TreeMap。下面给出一张图。

 

19.Collection 和 Collections 有什么区别?

Collection是java中的一个集合接口,而Collections是集合类的一个工具类,用于对集合中元素进行排序,搜索等。

 

20.List、Set、Map 之间的区别是什么?

实现了list接口的全部都是有序的,也就是ArrayList(线程不同步,所以线程不安全),LinkList(线程不安全)

实现了set接口的,hashset是无序的,TreeSet是有序的

实现了Map接口的,HashMap是无序的,TreeMap是有序的

 

21.HashMap 和 Hashtable 有什么区别?

首先HashMap和HashTable都实现了Map接口,但是他们之间肯定是有区别的,区别主要在以下几个方面:

① 同步和线程安全:HashMap是线程不同步的,所以它是线程不安全的。HashTable是线程同步的,所以它是线程安全的,多个线程可以共享一个HashTable

②是否允许存在null:HashMap是可以允许存在null的,也就是空的键或者空的值,但是HashTable是不允许的

③在单一线程情况下,因为HashTable是线程同步的,所以它的速度是要慢一些的。
 

22.如何决定使用 HashMap 还是 TreeMap?

 

23.说一下 HashMap 的实现原理?

HashMap里面有一个Entry数组,是里面的基本组成单元,每一个Entry包含一个键值对。然后冲突是通过链地址法来解决的。Entry数组的代码如下。

static class Entry<K,V> implements Map.Entry<K,V> {
        final K key;
        V value;
        Entry<K,V> next;//存储指向下一个Entry的引用,单链表结构
        int hash;//对key的hashcode值进行hash运算后得到的值,存储在Entry,避免重复计算

        /**
         * Creates new entry.
         */
        Entry(int h, K k, V v, Entry<K,V> n) {
            value = v;
            next = n;
            key = k;
            hash = h;
        }

24.说一下 HashSet 的实现原理?

是基于HashMap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75 的HashMap。封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象。
 

25.ArrayList 和 LinkedList 的区别是什么?

我们先来说说ArrayList,它是基于动态数组实现的,初始长度为10,所以它的查找效率高,但是添加和修改的效率低。

LinkedList是基于双向链表实现的,链表可以占用一段不连续的内存空间,所以它的查找效率要低一些,但是添加和修改的效率要高一些。

26.如何实现数组和 List 之间的转换?

首先两种的互相转换肯定是可以通过for循环来完成了。其次,数组转list是可以通过list.toArray(new String[list.size()])来完成的,array转list是可以通过Arrays.asList(array)来完成的。

 

27.ArrayList 和 Vector 的区别是什么?

1)  Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。 
2) 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

28.Array 和 ArrayList 有何区别?

Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。

Array大小是固定的,ArrayList的大小是动态变化的。

ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

29.在 Queue 中 poll()和 remove()有什么区别?

poll()方法和remove()方法都是从队列中取出一个元素,但是poll()在获取失败的时候会返回空,remove()方法在获取数据失败的时候抛出异常

30.哪些集合类是线程安全的?

线程安全的有vector和HashTable,StringBuffer。其他的都是不安全的

31.迭代器 Iterator 是什么?

Iterator接口提供了很多对集合元素进行迭代的方法。每一个集合类都包括了可以返回迭代器实例的迭代方法。

32.Iterator 怎么使用?有什么特点?

1.Iterator遍历集合元素的过程中不允许线程对集合元素进行修改,否则会抛出ConcurrentModificationEception的异常。
2.Iterator遍历集合元素的过程中可以通过remove方法来移除集合中的元素。
3.Iterator必须依附某个Collection对象而存在,Iterator本身不具有装载数据对象的功能。
4.Iterator.remove方法删除的是上一次Iterator.next()方法返回的对象。
5.强调以下next()方法,该方法通过游标指向的形式返回Iterator下一个元素。
 

33.Iterator 和 ListIterator 有什么区别?

1. ListIterator有add()方法,可以向List中添加对象,而Iterator不能

2. ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。

3. ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。

4. 都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。

34.怎么确保一个集合不能被修改?

可以使用 Collections. unmodifiableCollection(Collection c) 方法来创建一个只读集合,这样改变集合的任何操作都会抛出 Java.lang.UnsupportedOperationException 异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值