Java Hour 67 Java Collection API

时间:2023-03-08 16:06:02

本文不是一个大而全的讲述Java Coleection 相关的APi, 而是笔者认为哪些是一个初学者所能够而且必须确切知道的知识点。

Java Hour 67 Java Collection API

Collection 一脉

Java Hour 67 Java Collection API

这里有我们比较常用的List<E>, Set<E>.

List<E>

Java Hour 67 Java Collection API

实现这个接口的类有比较常见的ArrayList<E> 和 LinkedList<E>,还有Vector<E>.

Vector 是个线程安全的类:

public synchronized int lastIndexOf(Object o, int index) {
      if (index >= elementCount)
          throw new IndexOutOfBoundsException(index + " >= "+ elementCount);

      if (o == null) {
          for (int i = index; i >= 0; i--)
              if (elementData[i]==null)
                  return i;
      } else {
          for (int i = index; i >= 0; i--)
              if (o.equals(elementData[i]))
                  return i;
      }
      return -1;
  }

  public synchronized E firstElement() {
      if (elementCount == 0) {
          throw new NoSuchElementException();
      }
      return elementData(0);
  }

  public synchronized E lastElement() {

里面关键的方法都用了synchronized 关键字,作为线程安全的保障,当然效率也低了不少。

ArrayList 的结构类似于数组

LinkedList 的结构类似于链表

Set<E>

Set 一脉最大的区别就是里面的元素不允许重复。

Java Hour 67 Java Collection API

比较熟悉的就是HashSet<E> 了。

这里必须注意的是HashCode 的算法。

Map 一脉

 * @param <K> the type of keys maintained by this map
 * @param <V> the type of mapped values
 *
 * @author  Josh Bloch
 * @see HashMap
 * @see TreeMap
 * @see Hashtable
 * @see SortedMap
 * @see Collection
 * @see Set
 * @since 1.2
 */
public interface Map<K,V> {

Map 一脉用来以键值对的形式存放。

上面的HashSet 里面其实放了一个HashMap<E,Object> 的内置的Map.

Java Hour 67 Java Collection API

这里比较熟的应该就是HashMap 和ConcurrentMap 了。