面试之javaSe(三)

1.Hashcode的作用。

快速给元素定位,找到存储位置。了解hashSet中的hashCode.

在HashMap HashSet中,hashCode()是判断放进容器里的两个对象是否相等的依据。

2.ArrayList LinkedList Vector 的区别

ArrayList和Vector是一个可以处理变长数组的类型,他们是一个数组列表,因此内部是用数组实现的,两者的区别在于Vector线程安全,ArrayList线程不安全,Vector的大部分方法都包含了关键字synchronized来进行同步,所以性能较差。所以不需要考虑线程同步问题时,就使用ArrayList.

LinkedList可以看作是双向链表,他实现了Deque和List接口,同样他也是线程不安全的,他的内部实现不是数组,他是采用结点来存放数据,有一个指向链表头的结点first和一个指向链表尾的结点last,LinkedList插入删除快,ArrayList搜索读取快。相比ArrayList,需要更多的内存,因为ArrayList存的是实际数据,而LinkedList除了存数据还需要存头尾结点。

3.String、StringBuffer与StringBuilder的区别。

相比其他两个,String是一个不可变的对象,每次对String类型进行改变时,等同于新建了一个对象,然后变量指向新对象。要经常改变的字符串不推荐用String,每次生成对象对系统性能会产生影响,特别当无引用对象多了以后,GC就开始工作,速度就一定相当慢.

StringBuilder>StringBuffer>String 大多数情况下,但在特殊情况下String更快,例如(String=“haha“+“hehe”+“hei” ,这相当于String="hahahehehei"简单创建对象,比StringBuffer进行拼接更快,,,,,,String s1,String s2,  String s = s1+s2,这种情况就很慢)

StringBuilder:非线程安全,StringBuffer是线程安全的。

使用,操作少的数据用String,单线程操作字符串缓冲区用StringBuilder,多线程操作字符串缓冲区用StringBuffer

4. Map、Set、List、Queue、Stack的特点与用法。

  • Map 
  Map是键值对,成对添加,删除。键Key是唯一不能重复,一个键对应一个值,值可以重复。可以通过get(Obeject key)来获取值

TreeMap是有序的,HashMap是无序的,

Map的key和value都可以单独抽取出来,Set keySet()方法讲所有的key抽取成一个Set,Collection values()方法讲所有的value抽取成一个Collection。

  • Set
不包含重复元素,可以包含一个NUll元素,无序的只能通过Iterator来遍历,线程不同步。
  • List
元素有序、可重复,每个元素都有对应的索引,

可以在任意位置添加删除元素,可以通过Iterator遍历,也可以通过ListIterator实现双向遍历

  • Queue
队列,遵从先进先出原则。

使用时,尽量避免使用void add()和Object remove()方法,而是使用offer()来添加元素,使用poll来删除元素,他们的优点是可以通过返回值来确定是否操作成功

LinkedList实现了Deque(Queue子接口)接口和List接口

Queue通常不允许添加null元素

  • Stack
栈遵从后进先出的原则。

Stack继承Vector,对Vector进行扩展,有压栈push和出栈pop方法,以及获得栈顶元素peek方法,还有测试栈是否为空的empty()方法(其实Vector有一个isEmpty方法,二者用途是一样的,其实Stack继承Vector是典型的滥用继承。

  • 提醒
如果涉及到堆栈,队列等操作,建议使用List.

对于快速插入删除的,使用LinkedList

如需快速访问的,用ArrayList

5. HashMap和HashTable的区别。

  • hashTable同步的,而HashMap是非同步的,效率上比hashTable要高。
  • hashMap允许空键值,HashTable不允许
  • HashMap去掉了HashTable的contains()方法,但是加上了containsValue()和containsKey()方法
  • 关于遍历的迭代器,HashMap的迭代器是(Iterator)是fail-fast迭代器,而HashTable的Enumerator迭代器不是fail-fast的。所以当线程改变HashMap的结构(增加或删除),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法不会抛出异常。但这不并不是一定会发生的行为,要看JVM,这也是Iterator和Enumerator的区别。
  • 详情点击点击打开链接

6. HashMap和ConcurrentHashMap的区别,HashMap的底层源码。

  • 首先一点,HashMap是线程不安全的,ConcurrentHashMap是线程安全的
  • ConcurrentHashmap显然不是每个方法加synchronized,这样就成了HashTable,ConcurrentHashMap引用了“分段锁的概念”,将Map分为N个Segment(可以理解为HashTable),根据key.hashCode()来决定把key放在哪个Segment中。segments初始化为长度为16的数组
  • 如果考虑到并发性操作就使用ConcurrentHashMap,他的效率是HashTable的N倍,默认为16倍。

7.TreeMap、HashMap、LindedHashMap的区别。(答案不标准)

java为数据结构映射定义了一个接口java.util.Map;他有四个实现类:HashMap、HashTable、LinkedHashMap、TreeMap。Map主要用于存储键值树,根据键得到值,因此不允许键重复(重复就覆盖),但允许值重复。

  • Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
  • HashTable与HashMap类似,他继承子Dictionary类,不同的是,他不允许记录的键或值为空,它支持线程的同步,即仍以时刻只有一个线程能写HashTable,因此也导致了HashTable在写入时比较慢
  • LinkedHashMap保存了插入顺序,在用Iterator遍历时,先得到的肯定是最先插入的,也可以在构造函数时通过传参,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap的容量很大,实际数据少时,HashMap的遍历会很慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。
  • TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值升序,也可以指定排序。
  • 一般情况下,我们用的最多的是HashMap,HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。

    TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。

    LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列,像连接池中可以应用。

8.Collection包结构,与Collections的区别。

  • Collection是集合类的上级接口,子接口有Set、List、Map。
  • Collection是针对集合类的一个工具帮助类,提供了操作集合的工具方法,一系列静态方法实现对集合的搜索、排序、线程安全化等操作。此类不能实例化,就像一个工具类,服务于Java的Collection框架。





  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值