11.持有对象--java笔记

又看了java思想的第四版得第11章,记一下关键点留个纪念,呵呵。通俗易懂的就不写了。
按照章节和知识点写的。

这一章也是了解容器常用的知识点。

1.使用容器的原因

写程序之前不知道需要多少个对象。

2.基本概念

Collection  一个独立元素的序列,有list,set(元素不重复),queue

               ArrayList和LinkedList都是区别是array是随机访问速度快,但是插入移除慢,linked相反,且有栈,队列的方法。

               HashSet,TreeSet,LinkedHashSet

               HashMap,TreeMap,LinkedHashMap都是Hash快,tree按升序排,LinkedHash有hash速度,且按插入顺序。

Map 一组成对的键值对。

3.添加一组元素

主要是Arrays.asList和Collections.addAll()

 Collection<Integer> collection =
      new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5));
    Integer[] moreInts = { 6, 7, 8, 9, 10 };
    collection.addAll(Arrays.asList(moreInts));
    // Runs significantly faster, but you can't
    // construct a Collection this way:
   
Collections.addAll(collection, 11, 12, 13, 14, 15);
    Collections.addAll(collection, moreInts);
    // Produces a list "backed by" an array:
    List<Integer>
list = Arrays.asList(16, 17, 18, 19, 20);
    list.set(1, 99); // OK -- modify an element
    // list.add(21); // Runtime error because the
                     // underlying array cannot be resized.

Arrays.asList()返回的是一个底层是数组的List,所以企图改变它的大小 如add,remove都会报错。

 

这两个方法的差别

class Snow {}
class Powder extends Snow {}
class Light extends Powder {}
class Heavy extends Powder {}
class Crusty extends Snow {}
class Slush extends Snow {}

public class AsListInference {
  public static void main(String[] args) {
  
  List<Snow> snow1 = Arrays.asList(
      new Crusty(), new Slush(), new Powder());

    // Won't compile:
 
   // List<Snow> snow2 = Arrays.asList(
    //   new Light(), new Heavy());

    // Compiler says:
    // found   : java.util.List<Powder>
    // required: java.util.List<Snow>

    // Collections.addAll() doesn't get confused:
    List<Snow> snow3 = new ArrayList<Snow>();
    Collections.addAll(snow3, new Light(), new Heavy());

    // Give a hint using an
    // explicit type argument specification:
    List<Snow> snow4 = Arrays.<Snow>asList (
       new Light(), new Heavy());
  }
} ///:~

 

需要注意蓝色字体和红色区别,Arrays.asList()里的只能是父类的一级子类即power类型。进一步说明collections.addAll的灵活性。

4.容器打印

Arrays.toString()打印数组,容器则直接打印。

5.迭代器

Iterator是个容器都会返回的单向遍历器。所以统一了对容器的访问方式。

和foreach遍历区别是 不需要关心底层容器结构及其元素数量,可修改容器中元素。

ListIterator只能用于list,可双向遍历,且可以一开始就从n元素开始。listIterator(n)。

6.set介绍

treeset之外的set和collection有一样的借口,没有多余功能,只是行为不同,通常作为查找某个元素的是否在set中存在(归属性)。

treeset存在红黑树中。

7.队列queue

普通的queue可以用linkedlist实现。

Priorityqueue在java se5中已有,按照优先级弹出,不是先进先出。

各种队列和栈都是由linkedlist支持的。

8.treemap保持键的排序。

你可能感兴趣的:(java)