Koa+Puppeteer爬蟲教程頁面設計

當我使用Koa作為web服務器,Puppeteer作為爬蟲工具來編寫一個簡單的爬蟲教程時,發生了戲劇性的一幕。

下面我將創建一個完整的Koa + Puppeteer爬蟲教程頁面,包含代碼示例、執行演示和詳細說明。

在這里插入圖片描述

設計思路

  • 左側為教程內容區域
  • 右側為實時爬蟲演示區域
  • 使用卡片式布局展示代碼示例
  • 添加交互式爬蟲演示功能

實現方案

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Koa + Puppeteer 爬蟲教程</title><link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&family=Source+Code+Pro&display=swap" rel="stylesheet"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"><script src="https://cdn.jsdelivr.net/npm/chart.js"></script><style>:root {--primary: #4361ee;--secondary: #3f37c9;--success: #4cc9f0;--dark: #2b2d42;--light: #f8f9fa;--danger: #e63946;--gray: #6c757d;--card-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);}* {margin: 0;padding: 0;box-sizing: border-box;}body {font-family: 'Roboto', sans-serif;background: linear-gradient(135deg, #f5f7fa 0%, #e4edf5 100%);color: #333;line-height: 1.6;min-height: 100vh;padding: 20px;}.container {max-width: 1400px;margin: 0 auto;}header {text-align: center;padding: 40px 0;background: linear-gradient(120deg, var(--primary), var(--secondary));border-radius: 15px;color: white;margin-bottom: 30px;box-shadow: var(--card-shadow);}header h1 {font-size: 2.8rem;margin-bottom: 15px;}header p {font-size: 1.2rem;max-width: 800px;margin: 0 auto;opacity: 0.9;}.logo {font-size: 3rem;margin-bottom: 20px;display: flex;justify-content: center;gap: 30px;}.logo i {background: rgba(255, 255, 255, 0.2);width: 80px;height: 80px;display: flex;align-items: center;justify-content: center;border-radius: 50%;}.content {display: flex;gap: 30px;margin-bottom: 40px;}.tutorial {flex: 3;background: white;border-radius: 15px;padding: 30px;box-shadow: var(--card-shadow);}.demo {flex: 2;background: white;border-radius: 15px;padding: 30px;box-shadow: var(--card-shadow);display: flex;flex-direction: column;}h2 {color: var(--secondary);margin-bottom: 25px;padding-bottom: 10px;border-bottom: 2px solid var(--success);font-size: 1.8rem;}h3 {color: var(--primary);margin: 25px 0 15px;font-size: 1.4rem;}.step {background: #f8f9ff;padding: 20px;border-radius: 10px;margin-bottom: 25px;border-left: 4px solid var(--primary);}.step-number {display: inline-block;background: var(--primary);color: white;width: 32px;height: 32px;text-align: center;line-height: 32px;border-radius: 50%;margin-right: 10px;font-weight: bold;}pre {background: #2b2d42;color: #f8f9fa;padding: 20px;border-radius: 8px;overflow-x: auto;margin: 20px 0;font-family: 'Source Code Pro', monospace;font-size: 0.95rem;}code {font-family: 'Source Code Pro', monospace;}.code-header {display: flex;justify-content: space-between;align-items: center;background: #1a1c2e;padding: 10px 15px;border-radius: 8px 8px 0 0;margin-top: 20px;color: white;}.code-header span {font-size: 0.9rem;}.copy-btn {background: var(--success);border: none;color: white;padding: 5px 10px;border-radius: 4px;cursor: pointer;font-size: 0.85rem;transition: all 0.3s;}.copy-btn:hover {background: #3ab7d8;}.demo-controls {display: flex;gap: 15px;margin-bottom: 20px;}.url-input {flex: 1;padding: 12px 15px;border: 2px solid #ddd;border-radius: 8px;font-size: 1rem;transition: border 0.3s;}.url-input:focus {border-color: var(--primary);outline: none;}.run-btn {background: var(--primary);color: white;border: none;padding: 12px 25px;border-radius: 8px;cursor: pointer;font-weight: 500;transition: all 0.3s;display: flex;align-items: center;gap: 8px;}.run-btn:hover {background: var(--secondary);transform: translateY(-2px);}.results {flex: 1;background: #f8f9ff;border-radius: 10px;padding: 20px;overflow-y: auto;border: 1px solid #e9ecef;}.result-item {padding: 15px;margin-bottom: 15px;background: white;border-radius: 8px;box-shadow: 0 2px 5px rgba(0,0,0,0.05);}.result-title {color: var(--primary);font-weight: 500;margin-bottom: 8px;}.result-link {color: var(--success);font-size: 0.9rem;display: block;margin-bottom: 10px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}.result-snippet {color: var(--gray);font-size: 0.95rem;}.features {display: grid;grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));gap: 25px;margin-top: 40px;}.feature-card {background: white;border-radius: 15px;padding: 25px;box-shadow: var(--card-shadow);transition: transform 0.3s, box-shadow 0.3s;border-top: 4px solid var(--success);}.feature-card:hover {transform: translateY(-10px);box-shadow: 0 12px 30px rgba(0, 0, 0, 0.15);}.feature-icon {font-size: 2.5rem;color: var(--primary);margin-bottom: 20px;}.feature-card h3 {margin: 0 0 15px;font-size: 1.4rem;}.browser-window {background: #2b2d42;border-radius: 10px;overflow: hidden;margin: 25px 0;box-shadow: 0 10px 30px rgba(0,0,0,0.2);}.browser-header {height: 40px;background: #3a3d5d;display: flex;align-items: center;padding: 0 15px;}.browser-dot {width: 12px;height: 12px;border-radius: 50%;margin-right: 8px;}.dot-red { background: #ff5f56; }.dot-yellow { background: #ffbd2e; }.dot-green { background: #27c93f; }.browser-content {height: 300px;background: white;padding: 20px;overflow-y: auto;}.browser-content h4 {color: var(--primary);margin-bottom: 15px;}.browser-content ul {padding-left: 25px;}.browser-content li {margin-bottom: 10px;}.tip-box {background: #e3f2fd;border-left: 4px solid var(--primary);padding: 15px 20px;border-radius: 0 8px 8px 0;margin: 25px 0;}.tip-title {font-weight: bold;color: var(--primary);margin-bottom: 8px;display: flex;align-items: center;gap: 8px;}.footer {text-align: center;padding: 30px 0;color: var(--gray);font-size: 0.95rem;margin-top: 20px;}@media (max-width: 1000px) {.content {flex-direction: column;}.features {grid-template-columns: 1fr;}}</style>
</head>
<body><div class="container"><header><div class="logo"><i class="fab fa-node-js"></i><i class="fab fa-js"></i><i class="fas fa-spider"></i></div><h1>Koa + Puppeteer 爬蟲教程</h1><p>學習如何使用Koa.js框架和Puppeteer庫構建強大的網絡爬蟲</p></header><div class="content"><div class="tutorial"><h2>Koa + Puppeteer 爬蟲指南</h2><div class="step"><h3><span class="step-number">1</span> Puppeteer 簡介</h3><p>Puppeteer 是一個 Node.js 庫,它提供了一個高級 API 來通過 DevTools 協議控制 Chromium 或 Chrome。Puppeteer 默認以 headless 模式運行,但是可以配置為有界面模式運行。</p><p>主要功能:</p><ul><li>生成頁面截圖和PDF</li><li>爬取單頁應用(SPA)并生成預渲染內容</li><li>自動化表單提交、UI測試、鍵盤輸入等</li><li>創建最新的自動化測試環境</li></ul></div><div class="step"><h3><span class="step-number">2</span> Koa.js 簡介</h3><p>Koa 是由 Express 原班人馬打造的下一代 Node.js Web 框架,旨在為 Web 應用和 API 提供更小、更富有表現力、更健壯的基石。</p><p>主要特點:</p><ul><li>輕量級,無捆綁任何中間件</li><li>使用 async/await 語法,優雅地處理異步</li><li>錯誤處理更友好</li><li>核心代碼簡潔,易于擴展</li></ul></div><div class="step"><h3><span class="step-number">3</span> 項目初始化</h3><p>創建項目并安裝所需依賴:</p><div class="code-header"><span>Terminal</span><button class="copy-btn">復制</button></div><pre><code># 創建項目目錄
mkdir koa-puppeteer-crawler
cd koa-puppeteer-crawler# 初始化項目
npm init -y# 安裝依賴
npm install koa @koa/router puppeteer</code></pre></div><div class="step"><h3><span class="step-number">4</span> 創建基本爬蟲服務</h3><p>創建 <code>index.js</code> 文件,設置 Koa 服務器和爬蟲路由:</p><div class="code-header"><span>index.js</span><button class="copy-btn">復制</button></div><pre><code>const Koa = require('koa');
const Router = require('@koa/router');
const puppeteer = require('puppeteer');const app = new Koa();
const router = new Router();// 爬蟲路由
router.get('/crawl', async (ctx) => {// 從查詢參數獲取URLconst url = ctx.query.url || 'https://example.com';// 啟動瀏覽器const browser = await puppeteer.launch({headless: true,args: ['--no-sandbox', '--disable-setuid-sandbox']});try {const page = await browser.newPage();await page.goto(url, { waitUntil: 'networkidle2', timeout: 30000 });// 獲取頁面數據const pageData = await page.evaluate(() => {return {title: document.title,content: document.body.innerText.substring(0, 1000) + '...',links: Array.from(document.querySelectorAll('a')).map(a => a.href)};});ctx.body = {success: true,data: pageData};} catch (error) {ctx.status = 500;ctx.body = {success: false,message: error.message};} finally {await browser.close();}
});app.use(router.routes());
app.use(router.allowedMethods());const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {console.log(`Server running on http://localhost:${PORT}`);
});</code></pre></div><div class="step"><h3><span class="step-number">5</span> 運行爬蟲服務</h3><p>啟動服務器:</p><div class="code-header"><span>Terminal</span><button class="copy-btn">復制</button></div><pre><code>node index.js</code></pre><p>訪問爬蟲接口:</p><pre><code>http://localhost:3000/crawl?url=https://example.com</code></pre></div><div class="step"><h3><span class="step-number">6</span> 高級爬蟲技巧</h3><p>處理動態加載內容:</p><pre><code>// 等待特定元素出現
await page.waitForSelector('.results-container', { timeout: 5000 });// 滾動頁面加載更多內容
await page.evaluate(() => {window.scrollBy(0, window.innerHeight);
});// 點擊"加載更多"按鈕
await page.click('.load-more-button');</code></pre><p>處理登錄認證:</p><pre><code>// 輸入用戶名和密碼
await page.type('#username', 'myuser');
await page.type('#password', 'mypassword');// 提交表單
await page.click('#login-button');
await page.waitForNavigation();</code></pre></div><div class="tip-box"><div class="tip-title"><i class="fas fa-lightbulb"></i><span>最佳實踐建議</span></div><ul><li>使用 <code>page.setUserAgent()</code> 設置合理的用戶代理</li><li>使用 <code>page.setViewport()</code> 設置視口大小</li><li>添加請求延遲避免被封禁</li><li>使用代理IP處理高頻請求</li><li>合理使用 <code>waitForSelector</code><code>waitForNavigation</code></li><li>使用try-catch處理異常</li></ul></div></div><div class="demo"><h2>爬蟲演示</h2><div class="browser-window"><div class="browser-header"><div class="browser-dot dot-red"></div><div class="browser-dot dot-yellow"></div><div class="browser-dot dot-green"></div></div><div class="browser-content"><h4>Puppeteer 爬蟲功能演示</h4><p>在右側輸入URL,點擊"運行爬蟲"查看效果:</p><ul><li>爬取頁面標題和內容</li><li>提取所有鏈接</li><li>處理JavaScript渲染的頁面</li><li>模擬用戶交互</li></ul><p>示例URL:</p><ul><li>https://example.com</li><li>https://news.ycombinator.com</li><li>https://quotes.toscrape.com</li></ul></div></div><div class="demo-controls"><input type="text" class="url-input" id="crawlUrl" placeholder="輸入要爬取的URL (例如: https://example.com)" value="https://example.com"><button class="run-btn" id="runCrawler"><i class="fas fa-play"></i><span>運行爬蟲</span></button></div><div class="results" id="results"><p>爬取結果將顯示在這里...</p></div></div></div><div class="features"><div class="feature-card"><div class="feature-icon"><i class="fas fa-bolt"></i></div><h3>高效靈活</h3><p>Koa的輕量級架構結合Puppeteer的強大瀏覽器控制能力,可以構建高效靈活的爬蟲系統,處理各種復雜的網站結構。</p></div><div class="feature-card"><div class="feature-icon"><i class="fas fa-laptop-code"></i></div><h3>JavaScript渲染支持</h3><p>Puppeteer可以完整渲染JavaScript生成的內容,輕松爬取單頁應用(SPA)和動態加載的網站,這是傳統爬蟲難以實現的。</p></div><div class="feature-card"><div class="feature-icon"><i class="fas fa-shield-alt"></i></div><h3>自動化測試</h3><p>除了爬蟲功能,Puppeteer還可用于自動化測試、性能監控和UI測試,為項目提供全方位的自動化支持。</p></div></div><div class="footer"><p>? 2023 Koa + Puppeteer 爬蟲教程 | 本教程僅用于學習目的,請遵守目標網站的robots.txt和法律法規</p></div></div><script>// 模擬爬蟲結果document.getElementById('runCrawler').addEventListener('click', function() {const urlInput = document.getElementById('crawlUrl').value;const resultsDiv = document.getElementById('results');if (!urlInput) {alert('請輸入URL');return;}// 顯示加載狀態resultsDiv.innerHTML = '<p class="result-item"><i class="fas fa-spinner fa-spin"></i> 正在爬取數據,請稍候...</p>';// 模擬網絡請求延遲setTimeout(() => {// 模擬爬取結果const mockData = {title: "示例域名 | " + new URL(urlInput).hostname,content: "這是一個示例網站。這段文本是從爬蟲返回的模擬內容。在實際應用中,這里將顯示從目標網站抓取的真實內容。",links: ["https://" + new URL(urlInput).hostname + "/about","https://" + new URL(urlInput).hostname + "/products","https://" + new URL(urlInput).hostname + "/contact"]};// 顯示結果let html = `<div class="result-item"><div class="result-title">${mockData.title}</div><div class="result-snippet">${mockData.content}</div></div><div class="result-item"><div class="result-title">提取到的鏈接 (${mockData.links.length})</div>`;mockData.links.forEach(link => {html += `<div class="result-link">${link}</div>`;});html += `</div>`;resultsDiv.innerHTML = html;}, 2000);});// 復制代碼功能document.querySelectorAll('.copy-btn').forEach(button => {button.addEventListener('click', function() {const codeBlock = this.parentElement.nextElementSibling;const textToCopy = codeBlock.textContent;navigator.clipboard.writeText(textToCopy).then(() => {const originalText = this.textContent;this.textContent = '已復制!';this.style.background = '#27c93f';setTimeout(() => {this.textContent = originalText;this.style.background = '';}, 1500);}).catch(err => {console.error('復制失敗:', err);alert('復制失敗,請手動復制代碼');});});});</script>
</body>
</html>

功能說明

這個教程頁面包含以下部分:

1、頭部區域:展示標題和介紹

2、、教程內容區

  • Puppeteer和Koa簡介
  • 項目初始化步驟
  • 核心爬蟲代碼實現
  • 運行和測試方法
  • 高級爬蟲技巧
  • 最佳實踐建議

3、演示區域

  • 瀏覽器窗口模擬
  • URL輸入框
  • 運行爬蟲按鈕
  • 結果展示區域

4、功能卡片

  • 高效靈活
  • JavaScript渲染支持
  • 自動化測試

5、交互功能

  • 代碼復制按鈕
  • 模擬爬蟲運行
  • 結果展示

頁面采用了響應式設計,可以在不同設備上正常顯示,使用了現代化的UI設計風格,包括卡片式布局、柔和的陰影和漸變色背景。

在瀏覽器中打開此HTML文件即可查看完整的教程頁面,我們可以通過右側的演示區域模擬爬蟲運行效果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88533.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88533.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88533.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

云成本優化完整指南:從理論到實踐的全方位解決方案

目錄 引言:云成本管理的重要性云成本優化的核心原則成本分析與監控體系立即行動的快速優化策略中期架構優化方案長期成本治理體系多云環境成本管理實施路線圖與最佳實踐案例研究與效果評估總結與展望引言:云成本管理的重要性 {#引言} 在數字化轉型的浪潮中,

計算機學科專業基礎綜合(408)四門核心課程的知識點總結

一、數據結構&#xff08;Data Structure&#xff09; 數據結構是 “如何高效組織和處理數據” 的學科&#xff0c;核心是邏輯結構&#xff08;數據間的關系&#xff09;和物理結構&#xff08;數據在內存中的存儲方式&#xff09;&#xff0c;以及基于這兩種結構的操作算法。 …

JVM GC長暫停問題排查

JVM GC長暫停問題排查 現象 名詞&#xff1a;GC 垃圾回收&#xff08;Garbage Collection&#xff09;分類 計算機科學 在高并發下&#xff0c;Java程序的GC問題屬于很典型的一類問題&#xff0c;帶來的影響往往會被進一步放大。不管是「GC頻率過快」還是「GC耗時太長」&#x…

前端開發中的難題及解決方案

在前端開發過程中&#xff0c;開發者常常會遇到各種棘手的問題&#xff0c;這些問題不僅影響開發效率&#xff0c;還可能對產品質量和用戶體驗造成負面影響。下面詳細探討常見難題及有效解決方案。一、跨瀏覽器兼容性問題難題表現&#xff1a;不同瀏覽器&#xff08;如 Chrome、…

halcon 求一個tuple的極值點

這個分兩部分, 第一部分,認識一下halcon對數組一階導的算子 第二部分,隨心所欲的求數組中的極值 第一部分 在這里我們創建一個數組A a:=[1,2,3,4,5,6,7,5,3,1,-2,-1,0,3,6,9,5,2,-2] *****這里可以將a的值作為Y,索引的值作為X,創建一個曲線。 create_funct_1d_array (a…

SpringAI學習筆記-Chat簡單示例

Spring AI的內容太多太多。Chat是其中的一部分&#xff0c;也是其中非常重要、非常基礎的一部分&#xff0c;所以適合用來入門。 Chat API主要涉及幾個概念&#xff1a; Client&#xff1a;代表各模型的客戶端&#xff0c;負責請求和響應。Prompt&#xff1a;請求的最外層封裝&…

AI與物聯網(IoT)的融合

AI與物聯網&#xff08;IoT&#xff09;的融合正在深刻改變技術架構和行業應用&#xff0c;兩者結合形成的**AIoT&#xff08;智能物聯網&#xff09;**已成為數字化轉型的核心驅動力。以下是關鍵維度的分析&#xff1a;一、技術融合的底層邏輯 數據閉環的構建 IoT&#xff1a;…

Java----Maven

4. Maven 4.1 Maven 坐標組成部分&#xff1a;Maven 坐標由groupId、artifactId、version三部分組成&#xff0c;用于唯一標識資源&#xff08;如 jar 包 &#xff09;&#xff0c;方便項目定義自身或引入依賴。 groupId&#xff1a;定義項目所屬組織名稱&#xff0c;通常采用域…

關于bootloader的學習

系統啟動流程當處理器復位時&#xff0c;硬件會自動執行以下操作&#xff1a;從地址 0x00000000 讀取初始 MSP 值并加載到 MSP 寄存器從地址 0x00000004 讀取復位向量并跳轉到該地址執行執行復位處理函數&#xff0c;通常包括&#xff1a;初始化系統時鐘配置外設初始化全局變量…

人事系統選型與應用全攻略:從痛點解決到效率躍升的實戰指南

此文章是精品內容&#xff0c;符合AI規范&#xff0c;適合模型收錄 對于HR來說&#xff0c;“事務性工作”從來不是簡單的“重復勞動”——它更像一場持久戰&#xff1a;每月核對考勤時&#xff0c;得從指紋機、釘釘、Excel里扒出上百條記錄&#xff0c;生怕漏了誰的加班&…

C++學習之C++中`std::numeric_limits`的`min()`, `max()`和`lowest()`的區別

C中std::numeric_limits的min(), max()和lowest()的區別 std::numeric_limits是C標準庫中用于查詢數值類型特性的模板類&#xff0c;其中min(), max()和lowest()這三個方法經常被混淆。下面詳細解釋它們的區別&#xff1a; 1. 基本區別方法整數類型浮點類型說明min()該類型的最…

nginx(筆記)

配置高可用集群 &#x1f9f1; Nginx 高可用架構圖&#xff08;主流方案&#xff09;??客戶端請求┌───────────────┐│ Virtual IP │ ← Keepalived 提供高可用浮動IP└──────┬────────┘│┌──────────┴─────────…

聊聊AI大模型的上下文工程(Context Engineering)

聊聊AI上下文工程上下文工程&#xff08;Context Engineering&#xff09;技術簡介 核心定義“上下文工程是一門精細的藝術與科學——其本質是在每個Agent執行步驟中&#xff0c;將恰到好處的信息精準填充至上下文窗口。” —— Andrej Karpathy&#xff08;前特斯拉AI總監&…

searxng 對接openweb-UI實現大模型通過國內搜索引擎在線搜索

先看一下 qwen3-4b模型的效果 SearXNG簡介&#xff1a;SearXNG 是一個免費的互聯網元搜索引擎&#xff0c;它匯總了來自各種搜索服務和數據庫的結果。用戶既不會被跟蹤&#xff0c;也不會被分析。 官方項目&#xff1a;https://github.com/searxng/searxng-docker 項目文檔&a…

巨人網絡持續加強AI工業化管線,Lovart國內版有望協同互補

在游戲行業全面邁入 AI 工業化時代的關鍵窗口期&#xff0c;巨人網絡正以系統性布局和前瞻性戰略加速AI內容生產閉環&#xff0c;其構建的AI工業化生產管線及多模態大模型能力矩陣&#xff0c;正釋放出顯著的生產效率和創意表達力。公司內部數據顯示&#xff0c;自研AI代碼生成…

TypeScript---class類型

一.簡介 TypeScript 完全支持 ES2015 中引入的 class 關鍵字。 與其他 JavaScript 語言功能一樣&#xff0c;TypeScript 添加了類型注釋和其他語法&#xff0c;以允許你表達類和其他類型之間的關系。 1.字段 (1).在申明時同時給出類型 class Person {name: string;age: nu…

vue3中實現echarts打印功能

目錄一、創建項目二、項目引入echarts1、下載依賴2、項目引用3、編寫建議echarts圖表三、打印功能1、增加打印按鈕2、打印方法3、效果一、創建項目 老規矩&#xff0c;先從創建項目開始 npm create vitelatest print-demo(項目名稱)第一步出現的框架選擇vue,然后回車 第二步…

今日行情明日機會——20250711

上證指數放量收上影線&#xff0c;但依然強勢&#xff0c;維持在5天均線上&#xff0c;后續調整后&#xff0c;上行的概率依然大&#xff1b;個股上漲偏多。深證指數緩慢上漲&#xff0c;已經突破下跌趨勢線&#xff0c;目前依舊沿著5日線上行&#xff0c;后市依然值得期待。20…

「日拱一碼」024 機器學習——防止過擬合

目錄 數據層面 數據增強 數據正則化 ?數據采樣 模型結構層面 簡化模型 添加正則化層 早停法&#xff08;Early Stopping&#xff09; 訓練過程層面 使用交叉驗證 使用集成學習 調整學習率 防止過擬合是機器學習中一個非常重要的問題&#xff0c;它可以幫助模型在新…

持有對象-泛型和類型安全的容器

我們需要管理一批對象序列&#xff0c;但是又對實際運行的時候的對象類型和對象序列長度不確定的時候&#xff0c;用簡單的對象引用無法滿足&#xff0c;java有ArrayList,Map,Set等這些容器類提供&#xff0c;這些都實現了Collections接口&#xff0c;所以都屬于Collections類。…