Java Collection (一)

我们今天要讲的是Java的容器类库, 强大的标准类库让Java在编程语言的竞争中脱颖而出,而高效好用的容器类库是标准库中的重点。


Java 容器大体可以分为两类: 继承于java.util.Collection 接口用来存放同质类型的容器,继承自Map<K, V> 存放多个关键字-值映射关系的Map类型。


Collection 的实现由多种, 常见的有

  • List 可能是最常用的容器接口,List中的元素是线性有序的,我们可以通过 T get(int index) 函数来获取不同位置的元素。 List最常见的实现有ArrayList和LinkedList, 顾名思义, ArrayList是用数组来实现,随机访问的效率高,在非末尾的插入删除的代价较高。 LinkedList则是用链表来实现的,LinkedList中的每一个Node都保存了指向下一个Node的指针。 学过数据结构的同学都知道LinkedList的随机访问的代价很高,但是插入删除比较快。 在实际程序应用中,ArrayList使用比较多,主要是因为很多时候我们都在最后面插入元素, 且ArrayList的空间利用效率高,对缓存也比较友好。

    List<String> words = new ArrayList<String>();
    words.add("so"); // words=["so"]
    words.add("easy"); // words=["so", "easy"]
  • Set 的定义和数学中的集合是类似的,相同的元素只会保存一个, 例如

Set<Integer> numbers = new TreeSet<Integer> ();
numbers.add(112); // numbers = [112]
numbers.add(113); // numbers = [112,113]
numbers.add(112); // numbers = [112,113]

Set的实现有HashSet和TreeSet,HashSet会调用元素的hashCode和equals() 方法来确保元素的唯一性,所以可以放入HashSet中的元素类都必须正确实现这两个方法。TreeSet是用二叉树的方法存放数据,元素都必须实现Comparable接口实现元素的排序。 HashSet不维护元素的顺序,TreeSet则保留了Comparable接口给定的顺序。 在上面的例子中, 如果我们构造的是HashSet, 打印出来的元素顺序是[113,112]


  • Queue 可以认为是List的功能缩减版本。queue的中文是队列, 这个名字可能让人联想到日常生活中的排队买票或者排队登船。 这个接口的实际作用和排队类似,主要有2个功能

boolean offer(E e); // 在队列末尾增加一个元素
E poll(); // 删除队列首部的一个元素, 并将这个元素返回

Queue在多线程环境中的应用比较广,因为queue模拟了生产者消费者模型中的操作场景, 生产者产生对象并调用offer方法插入队列, 消费者调用poll方法取得对象。



本文出自 “大道至简” 博客,转载请与作者联系!

你可能感兴趣的:(java,Collection)