• Java手写队列和案例拓展


    Java手写队列和案例拓展

    思维导图解释实现思路原理

    队列
    添加元素
    删除元素
    获取队首元素
    获取队列长度

    队列是一种常见的数据结构,遵循先进先出(FIFO)的原则。在Java中,我们可以手动实现一个队列,以便更好地理解其原理和实现。

    概念回顾

    队列是一种先进先出(FIFO)的数据结构,类似于现实生活中排队的场景。队列有两个基本操作:入队和出队。入队将元素添加到队列的末尾,出队将队列的第一个元素移除并返回。队列还可以通过peek方法获取队首元素,通过size方法获取队列长度,通过isEmpty方法判断队列是否为空。通过手写队列的实现,我们更好地理解了队列的原理和实现方式。队列在实际开发中有着广泛的应用,例如任务调度、消息队列等场景。

    实现的详细介绍和详细步骤

    步骤一:创建队列类

    首先,我们需要创建一个队列类,包含添加元素、删除元素、获取队首元素和获取队列长度的方法。

    public class MyQueue<T> {
        private List<T> queue;
    
        public MyQueue() {
            queue = new ArrayList<>();
        }
    
        public void enqueue(T item) {
            queue.add(item);
        }
    
        public T dequeue() {
            if (isEmpty()) {
                throw new NoSuchElementException("队列为空");
            }
            return queue.remove(0);
        }
    
        public T peek() {
            if (isEmpty()) {
                throw new NoSuchElementException("队列为空");
            }
            return queue.get(0);
        }
    
        public int size() {
            return queue.size();
        }
    
        public boolean isEmpty() {
            return queue.isEmpty();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    步骤二:添加元素

    添加元素的方法为enqueue,将元素添加到队列的末尾。

    public void enqueue(T item) {
        queue.add(item);
    }
    
    • 1
    • 2
    • 3

    步骤三:删除元素

    删除元素的方法为dequeue,将队列的第一个元素移除并返回。

    public T dequeue() {
        if (isEmpty()) {
            throw new NoSuchElementException("队列为空");
        }
        return queue.remove(0);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    步骤四:获取队首元素

    获取队首元素的方法为peek,返回队列的第一个元素。

    public T peek() {
        if (isEmpty()) {
            throw new NoSuchElementException("队列为空");
        }
        return queue.get(0);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    步骤五:获取队列长度

    获取队列长度的方法为size,返回队列中元素的个数。

    public int size() {
        return queue.size();
    }
    
    • 1
    • 2
    • 3

    步骤六:判断队列是否为空

    判断队列是否为空的方法为isEmpty,返回一个布尔值。

    public boolean isEmpty() {
        return queue.isEmpty();
    }
    
    • 1
    • 2
    • 3

    总结

    通过手写队列的实现,我们更好地理解了队列的原理和实现方式。队列在实际开发中有着广泛的应用,例如任务调度、消息队列等场景。掌握队列的基本操作对于提高编程能力和解决实际问题非常有帮助。

    拓展案例:实现一个基于队列的热门电影排行榜

    假设我们需要实现一个热门电影排行榜,使用队列来存储电影信息,并按照热度进行排序。以下是实现步骤的文字描述和代码示例。

    步骤一:创建电影类

    首先,我们需要创建一个电影类,包含电影名称和热度两个属性。

    public class Movie {
        private String name;
        private int popularity;
    
        public Movie(String name, int popularity) {
            this.name = name;
            this.popularity = popularity;
        }
    
        public String getName() {
            return name;
        }
    
        public int getPopularity() {
            return popularity;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    步骤二:创建电影排行榜类

    创建一个电影排行榜类,使用队列来存储电影信息,并实现按照热度进行排序的方法。

    public class MovieRanking {
        private MyQueue<Movie> movieQueue;
    
        public MovieRanking() {
            movieQueue = new MyQueue<>();
        }
    
        public void addMovie(Movie movie) {
            movieQueue.enqueue(movie);
        }
    
        public Movie getTopMovie() {
            if (movieQueue.isEmpty()) {
                throw new NoSuchElementException("电影排行榜为空");
            }
            Movie topMovie = movieQueue.peek();
            MyQueue<Movie> tempQueue = new MyQueue<>();
    
            while (!movieQueue.isEmpty()) {
                Movie movie = movieQueue.dequeue();
                if (movie.getPopularity() > topMovie.getPopularity()) {
                    topMovie = movie;
                }
                tempQueue.enqueue(movie);
            }
    
            while (!tempQueue.isEmpty()) {
                movieQueue.enqueue(tempQueue.dequeue());
            }
    
            return topMovie;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    步骤三:测试代码

    public class Main {
        public static void main(String[] args) {
            MovieRanking ranking = new MovieRanking();
    
            ranking.addMovie(new Movie("Movie A", 100));
            ranking.addMovie(new Movie("Movie B", 200));
            ranking.addMovie(new Movie("Movie C", 150));
            ranking.addMovie(new Movie("Movie D", 300));
    
            Movie topMovie = ranking.getTopMovie();
            System.out.println("热门电影:" + topMovie.getName());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    运行结果:

    热门电影:Movie D
    
    • 1

    通过以上案例,我们实现了一个基于队列的热门电影排行榜。每次获取热门电影时,我们会遍历整个队列,找到热度最高的电影,并将队列恢复原样。这样,我们可以不断更新排行榜,并获取当前热门的电影。

  • 相关阅读:
    A*学习和修改
    山西电力市场日前价格预测【2023-09-19】
    spring复习(第一天下午)(黑马版)
    使用python生成文字视频
    内网渗透体系学习6
    Conda详细介绍
    Spring Cloud 配置中心实战教程
    工程建设行业智能供应链系统:优化产业链运作效率,实现全链路数字化建设
    python:numpy查询定位赋值数值所在行列
    JumpServer 如何配置LDAP服务
  • 原文地址:https://blog.csdn.net/qq_22593423/article/details/132894650