第二学期第九周周报

一、本周计划

1、了解集合的相关知识,每个集合之间的区别及大概的底层原理

2、TreeSet写一个类然后排序

二、完成情况

1、集合框架及其数据结构

2、TreeSet排序

import java.time.temporal.Temporal;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
class Person{
    private String name;
    public Person(String name){
        this.name = name;
    }
    public String toString(){
        return this.name;
    }
}
class MyComparator implements Comparator<Object> {
    @Override
    public int compare(Object o1,Object o2) {
        Person a = (Person)o1;
        Person b = (Person)o2;
        return b.toString().compareTo(a.toString());
    }
}
public class Treeset {
    public static void main(String[] args) {
//        Set t = new TreeSet<>();
//        t.add('G');
//        t.add('F');
//        t.add('J');
//        t.add('A');
//        t.add('S');
//        t.add('D');
//        for (Character a:t){
//            System.out.print(a + " ");
//        }
        Set<Person> t = new TreeSet<>(new MyComparator());
        t.add(new Person("asd"));
        t.add(new Person("wdq"));
        System.out.println(t);
    }
}

3、优先队列

public class MyPriorityQueue {
    private int[] array = new int[100]; 
    private int size = 0;   // [0, size) 表示有效元素区间.

    public void offer(int x) {
        
        array[size] = x;
        size++;
        // 向上调整
        shiftUp(array, size, size - 1);
    }

    private void shiftUp(int[] array, int size, int index) {
        int child = index;
        int parent = (child - 1) / 2;
        // 如果 child 为 0, 说明 child 已经是根节点了. 根节点就没有父节点.
        while (child > 0) {
            if (array[parent] < array[child]) {
                int tmp = array[parent];
                array[parent] = array[child];
                array[child] = tmp;
            } else {
                break;
            }
            child = parent;
            parent = (child - 1) / 2;
        }
    }

    public Integer poll() {
        if (size <= 0) {
            return null;
        }
        int ret = array[0];

        // 删除队首元素(根节点) 
        array[0] = array[size - 1];
        size--;
        shiftDown(array, size, 0);
        return ret;
    }

    private void shiftDown(int[] array, int size, int index) {//下标从零开始
        int parent = index;
        int child = 2 * parent + 1;
        while (child < size) {
            if (child + 1 < size && array[child + 1] > array[child]) {
                child = child + 1;
            }
            if (array[child] > array[parent]) {
                int tmp = array[child];
                array[child] = array[parent];
                array[parent] = tmp;
            } else {
                break;
            }
            parent = child;
            child = 2 * parent + 1;
        }
    }

    public Integer peek() {
        if (size == 0) {
            return null;
        }
        return array[0];
    }

    public boolean isEmpty() {
        return size == 0;
    }

    public static void main(String[] args) {
        MyPriorityQueue queue = new MyPriorityQueue();
        queue.offer(9);
        queue.offer(5);
        queue.offer(2);
        queue.offer(7);
        queue.offer(3);
        queue.offer(6);
        queue.offer(8);
        while (!queue.isEmpty()) {
            Integer cur = queue.poll();
            System.out.println(cur);
        }
    }
}

三、下周计划

复习整理

你可能感兴趣的:(周报)