Java容器知识点整理

java 容器都有哪些?

List 、ArrayList、Vectory、map、HashTable、HashMap、Hashset

数组、String、java.util包下的集合容器 (如图:)

java容器

(Queue: 先进先出的线性表)

Collection 和 Collections 有什么区别?

java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。

java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

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

List和Set都是conllection的子接口或者实现类

​ List 有序可重复,允许存入多个null;

​ Set 无序不可重复,只允许一个null;

Map不是conllection的子接口或者实现类,Map是一个接口

HashMap 和 Hashtable 有什么区别?

HashMap和HashTable都实现了Map接口,主要区别从三个方面入手:线程安全性、同步(synchronization)、速度。

  1. HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。
  2. HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。
  3. 另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。
  4. 由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
  5. HashMap不能保证随着时间的推移Map中的元素次序是不变的。

要注意的一些重要术语:

1) sychronized意味着在一次仅有一个线程能够更改Hashtable。就是说任何线程要更新Hashtable时要首先获得同步锁,其它线程要等到同步锁被释放之后才能再次获得同步锁更新Hashtable。

2) Fail-safe和iterator迭代器相关。如果某个集合对象创建了Iterator或者ListIterator,然后其它的线程试图“结构上”更改集合对象,将会抛出ConcurrentModificationException异常。但其它线程可以通过set()方法更改集合对象是允许的,因为这并没有从“结构上”更改集合。但是假如已经从结构上进行了更改,再调用set()方法,将会抛出IllegalArgumentException异常。

3) 结构上的更改指的是删除或者插入一个元素,这样会影响到map的结构。

我们能否让HashMap同步?

HashMap可以通过下面的语句进行同步:
Map m = Collections.synchronizeMap(hashMap);

结论:

Hashtable和HashMap有几个主要的不同:线程安全以及速度。仅在你需要完全的线程安全的时候使用Hashtable,而如果你使用Java 5或以上的话,请使用ConcurrentHashMap吧。

如何决定使用 HashMap 还是 TreeMap?

说一下 HashMap 的实现原理?

说一下 HashSet 的实现原理?

ArrayList 和 LinkedList 的区别是什么?

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

ArrayList 和 Vector 的区别是什么?

Array 和 ArrayList 有何区别?

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

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

迭代器 Iterator 是什么?

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

Iterator 和 ListIterator 有什么区别?

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

-------------本文结束感谢您的阅读-------------