11 持有对象

11.4 容器的打印

PrintingContainers

class PrintingContainers {
    static Collection fill(Collection<String> collection) {
        collection.add("rat");
        collection.add("cat");
        collection.add("dog");
        collection.add("dog");
        return collection;
    }
    static Map fill(Map<String,String> map) {
        map.put("rat","1");
        map.put("cat","2");
        map.put("dog","3");
        map.put("dog","4");
        return map;
    }
    public static void chapter11_4() {
        //Collection
        System.out.println(fill(new ArrayList<>()));
        System.out.println(fill(new LinkedList<>()));
        System.out.println(fill(new HashSet<>()));              //fastest
        System.out.println(fill(new TreeSet<>()));              //比较的顺序
        System.out.println(fill(new LinkedHashSet<>()));        //被添加的顺序
        //Map
        System.out.println(fill(new HashMap<>()));              //fastest
        System.out.println(fill(new TreeMap<>()));              //比较的顺序
        System.out.println(fill(new LinkedHashMap<>()));        //被添加的顺序
    }
}

(1)Collection:

List:ArrayList,LinkedList

Set:HashSet,TreeSet,LinkedHashSet

Queue:LinkedList

(2)Map:

HashMap,TreeMap,LinkedHashMap

11.11 Queue

QueueDemo

class QueueDemo {
    static void printQ(Queue queue) {
        while(queue.peek() != null) {
            System.out.print( " " + queue.remove());
        }
        System.out.println();
    }
    static void chapter11_11() {
        Queue<Integer> queue = new LinkedList<>();
        Random random = new Random(7);
        for(int i=0;i<10;i++) {
            queue.offer(random.nextInt(10));
        }
        printQ(queue);
    }
}

Queue是个接口,LinkedList实现了这个接口

PriorityQueueDemo

class PriorityQueueDemo {
    static void chapter11_11() {
        List<Integer> list = Arrays.asList(7,17,27,37,40);
        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(list);
        QueueDemo.printQ(priorityQueue);

        priorityQueue = new PriorityQueue<>(list.size(),Collections.reverseOrder());
        priorityQueue.addAll(list);
        QueueDemo.printQ(priorityQueue);
    }
}

默认排序将使用对象在队列中的自然排序,可以通过自己的Comparator来修改这个顺序

11.13 Foreach与迭代器

ModifyingArraysAsList

class ModifyingArraysAsList {
    static void chapter11_13() {
        Random random = new Random(7);
        Integer[] ia = {1, 2, 3, 4, 5, 6, 7};

        List<Integer> list1 = new ArrayList<>(Arrays.asList(ia));
        System.out.println("before:" + list1);
        Collections.shuffle(list1,random);
        System.out.println("after:" + list1);
        System.out.println("Arrays.toString(ia):" + Arrays.toString(ia));
        System.out.println("ia:" + ia);

        List<Integer> list2 = Arrays.asList(ia);
        System.out.println("before:" + list2);
        Collections.shuffle(list2,random);
        System.out.println("after:" + list2);
        System.out.println("Arrays.toString(ia):" + Arrays.toString(ia));
        System.out.println("ia:" + ia);
    }
}

(1)Arrays.asList()被传递给了我ArrayList()构造函数,则新创建引用list1

(2)Arrays.asList()产生的list2对象会使用底层数组作为物理实现

11.14 总结

简单的容器分类

猜你喜欢

转载自blog.csdn.net/u012906122/article/details/113855726