java集合(1)

目錄

一.集合概述

二. 集合體系概述

1. Collection接口

1.1?List接口

1.2 Set接口

2. Map接口

三. ArrayList

1.ArrayList常用方法

2.ArrayList遍歷

2.1 for循環

2.2 增強for循環

2.3 迭代器遍歷


一.集合概述

我們經常需要存儲一些數據類型相同的元素,之前我們學過的容器就是數組,但是數組存在一個問題

1.數組的長度一旦確定就不能改變

但是我們在實際開發中,往往需要動態增長的容器來幫我們存儲數據,顯然只用數組的話需要自己去創建新數組并拷貝元素,這大大降低了開發效率,所以java提供了底層不同實現的數據結構的容器稱為集合

二. 集合體系概述

1. Collection接口

Collection是一個接口,里面可以定義抽象方法,常量,靜態方法,默認方法(jdk8及之后),該接口是單列集合的父接口,其中主要用于定義一些單列集合通用的方法,例如:單列集合的增刪改查

1.1?List接口

?List接口繼承了Collection接口,List接口下的實現類允許出現重復元素,可以用索引和迭代器訪問,主要有ArrayList,LinkedList,Vector等實現類

1.2 Set接口

Set接口同樣繼承了Collection接口,Set接口下的實現類不允許出現重復元素,且不能用索引訪問,只能用迭代器訪問,主要有HashSet,TreeSet等實現類

2. Map接口

Map是一個接口,里面可以定義抽象方法,常量,靜態方法,默認方法(jdk8及之后),該接口是雙列(鍵值對存儲)集合的父接口,其中主要定義一些雙列集合通用的方法,例如:雙列集合的增刪改查,主要有HashMap等實現類

三. ArrayList

ArrayList是List接口下的一個實現類,底層是一個可以動態增長的數組,所有的集合容器中都可以添加任意類型的數據,但為了使用時的統一,用一個<>指明集合中的元素類型,這是泛型,例如:<String>

1. ArrayList常用方法

size()返回集合中實際元素個數
add(E e)向集合末尾添加元素,添加成功返回true,添加失敗返回false
add(int index,E e)向指定位置處添加元素
remove(Object o)刪除指定內容的元素,刪除成功返回true,刪除失敗返回false
remove(int index)刪除指定位置處的元素,刪除成功會把該值返回
get(int index)獲取指定位置處的元素
indexOf(Object o)從左向右查找指定元素,找到返回下標,找不到返回-1
lastIndexOf(Object o)從右向左查找指定元素,找到返回下標,找不到返回-1
set(int index,E element)用指定的元素替換指定位置的元素,同時返回舊元素
isEmpty()判斷集合是否為空
contains(Object o)判斷集合中是否包含指定元素

四. LinkedList

LinkedList是List接口下的一個實現類,底層是鏈表結構

1.LinkedList常用方法

int size()返回集合中的元素個數
boolean add(E e)向集合尾部添加指定元素,添加成功返回true,添加失敗返回false
void add(int index,E element()向指定位置添加指定元素
? ? ? ? E get(int index)獲取指定位置的元素
boolean remove(Object o)刪除指定元素,刪除成功返回true,刪除失敗返回false
E remove(int index)刪除指定位置的元素,并將其返回
E remove()刪除頭部的元素并返回
void addFirst(E e)向頭部添加元素
E removeLast()刪除尾部元素并返回
void addLast(E e)向尾部添加元素
E pop()刪除頭部元素并返回
void clear()清空鏈表元素
boolean isEmpty()判斷鏈表是否為空
boolean contains(Object o)判斷鏈表中是否包含指定元素

五. Vector

vector和ArrayList底層都是數組,且兩者所擁有的方法也都是相同的,唯一的不同是,Vector的方法中被synchronized修飾,是線程安全的,它們兩者的關系就好像StringBuffer和StringBuilder的關系一樣

六. List接口下的實現類的遍歷

這里以ArrayList為例,LinkedList和vector也是類似的

1. for循環

public class ArrayListDemo4 {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<>();arrayList.add("a");arrayList.add("a");arrayList.add("a");arrayList.add("b");arrayList.add("c");arrayList.add("d");for(int i = 0;i < arrayList.size(); i++){if("a".equals(arrayList.get(i))){arrayList.remove("a");i--;}}}
}

注意:用for循環刪除集合中的元素時要注意索引和元素位置的變化,將索引減回去,避免刪除元素不徹底

2. 增強for循環

public class ArrayListDemo4 {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<>();arrayList.add("a");arrayList.add("a");arrayList.add("a");arrayList.add("b");arrayList.add("c");arrayList.add("d");/*2.增強for循環增強for循環遍歷元素時,不允許修改集合元素(刪除,添加)*/for(String s:arrayList){//arrayList.remove(s);System.out.print(s+" ");//arrayList.add("1");}}
}

?注意:在使用增強for循環遍歷集合時不能對集合進行增刪改查等操作?

3. 迭代器遍歷

public class ArrayListDemo4 {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<>();arrayList.add("a");arrayList.add("a");arrayList.add("a");arrayList.add("b");arrayList.add("c");arrayList.add("d");/*迭代器遍歷*///獲得集合對象的迭代器對象Iterator<String> it = arrayList.iterator();//正向遍歷while(it.hasNext()) {String s = it.next();//獲取到下一個元素System.out.print(s+" ");/*if(s.equals("b")){it.remove();//使用迭代器對象刪除元素}*/}System.out.println();//ListIterator 迭代器 只能對List接口下的實現類遍歷//listIterator(index);可以從指定的位置開始向前或者向后遍歷ListIterator<String> listIterator = arrayList.listIterator(1);while(listIterator.hasNext()){System.out.print(listIterator.next()+" ");}System.out.println();//反向遍歷ListIterator<String> listIterator1 = arrayList.listIterator(arrayList.size());while(listIterator1.hasPrevious()){System.out.print(listIterator1.previous()+" ");}}
}

使用迭代器遍歷集合是更推薦的方法,它既可以在遍歷時對集合進行操作,也不用自己去管下一個元素是否會被略過

?

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

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

相關文章

Java 基礎語法

Java 是一種面向對象的編程語言&#xff0c;具有簡單、健壯、安全、跨平臺等特點。下面是Java基礎語法的詳細介紹&#xff0c;并附帶一些示例說明&#xff1a; ### 1. 變量和數據類型 Java 中的變量用于存儲數據&#xff0c;必須先聲明后使用。Java 的數據類型分為基本數據類…

C++ 仿QT信號槽二

// 實現原理 // 每個signal映射到bitset位&#xff0c;全集 // 每個slot做為signal的bitset子集 // signal全集觸發&#xff0c;標志位有效 // flip將觸發事件隊列前置 // slot檢測智能指針全集觸發的標志位&#xff0c;主動運行子集綁定的函數 // 下一幀對bitset全集進行觸發清…

【C++】 解決 C++ 語言報錯:Segmentation Fault

文章目錄 引言 段錯誤&#xff08;Segmentation Fault&#xff09;是 C 編程中常見且令人頭疼的錯誤之一。段錯誤通常發生在程序試圖訪問未被允許的內存區域時&#xff0c;導致程序崩潰。本文將深入探討段錯誤的產生原因、檢測方法及其預防和解決方案&#xff0c;幫助開發者在…

Lex Fridman Podcast with Andrej Karpathy

我不太喜歡Lex Fridman的聲音&#xff0c;總覺得那讓人昏昏欲睡&#xff0c; 但無奈他采訪的人都太大牌了&#xff0c;只能去聽。但是聽著聽著&#xff0c;就會覺得有深度的采訪這些人&#xff0c;似乎也只有他這種由研究員背景的人能干&#xff0c; 另&#xff0c;他提的問題確…

4.2 投影

一、投影和投影矩陣 我們以下面兩個問題開始&#xff0c;問題一是為了展示投影是很容易視覺化的&#xff0c;問題二是關于 “投影矩陣”&#xff08;projection matrices&#xff09;—— 對稱矩陣且 P 2 P P^2P P2P。 b \boldsymbol b b 的投影是 P b P\boldsymbol b Pb。…

android的dump_processe中anon和swap字段的含義是什么?計算進程占用內存大小是否可以用這兩個字段相加?

在Android系統中&#xff0c;dump_processes 命令或類似機制&#xff08;如通過 adb shell dumpsys&#xff09;的輸出中&#xff0c;可能會包含與進程內存使用相關的信息&#xff0c;但通常不直接以 anon 和 swap 作為字段名。不過&#xff0c;基于您的提問&#xff0c;我可以…

嵌入式學習——硬件(Linux內核驅動編程LED、蜂鳴器、按鍵)——day59

1. 編寫LED驅動&#xff08;初始化所有子設備號&#xff09; #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <asm/uaccess.h> #include <asm/io.h>#define GPBCON (0x5…

2024年7月5日 (周五) 葉子游戲新聞

老板鍵工具來喚去: 它可以為常用程序自定義快捷鍵&#xff0c;實現一鍵喚起、一鍵隱藏的 Windows 工具&#xff0c;并且支持窗口動態綁定快捷鍵&#xff08;無需設置自動實現&#xff09;。 卸載工具 HiBitUninstaller: Windows上的軟件卸載工具 《樂高地平線大冒險》為何不登陸…

江漢大學劉春萌同學整理的wifi模塊 上傳mqtt實驗步驟

一.固件燒錄 1.打開安信可官網 2.點擊wifi模組系列的ESP8266 3.點擊各類固件后選擇固件號1471下載 4.打開燒錄工具將下載的二進制文件導入并將后面的起始地址寫為0x00000,下面勾選40mhz QIO 8Mbit點擊start下載即可 二.本地部署mqtt服務器(windows) 1.下載mosquitto后有一個m…

Java并發編程知識整理筆記

目錄 ?1. 什么是線程和進程&#xff1f; 線程與進程有什么區別&#xff1f; 那什么是上下文切換&#xff1f; 進程間怎么通信&#xff1f; 什么是用戶線程和守護線程&#xff1f; 2. 并行和并發的區別&#xff1f; 3. 創建線程的幾種方式&#xff1f; Runnable接口和C…

微博視頻下載

video_urls 獲取xpath://video/src|//video/autoplay # !/usr/bin/python3 # -*- coding:utf-8 -*- """ author: JHC000abcgmail.com file: demo1.py time: 2024/6/3 18:00 desc:""" import os import re import requests from urllib.parse im…

Qt實現流動的管道效果代碼示例

在現代圖形用戶界面&#xff08;GUI&#xff09;應用程序中&#xff0c;動態效果可以顯著增強用戶體驗。本文將介紹如何使用Qt框架實現一個流動的管道效果。我們將通過自定義QWidget來繪制管道&#xff0c;并使用定時器來實現流動效果。 1. 準備工作 首先&#xff0c;確保你已…

LeetCode.68文本左右對齊

問題描述 給定一個單詞數組 words 和一個長度 maxWidth &#xff0c;重新排版單詞&#xff0c;使其成為每行恰好有 maxWidth 個字符&#xff0c;且左右兩端對齊的文本。 你應該使用 “貪心算法” 來放置給定的單詞&#xff1b;也就是說&#xff0c;盡可能多地往每行中放置單詞…

HMI 的 UI 風格創造奇跡

HMI 的 UI 風格創造奇跡

Table-driven Declarative Rewrite Rule (DRR)

Table-driven Declarative Rewrite Rule (DRR 好處規則定義原模式基于位置的匹配操作的匹配有向無環圖&#xff08;DAG&#xff09;(AOp (BOp), $attr): 綁定操作的結果 好處 模式創建者只需要聲明性地指定重寫模式&#xff0c;而不必擔心調用具體的C方法。 消除樣板代碼&…

Laravel5+mycat 報錯 “Packets out of order”

背景 近期對負責項目&#xff0c;配置了一套 主從復制的 MySQL 集群 使用了中間件 mycat 但測試發現&#xff0c;替換了原來的數據連接后&#xff0c;會出現 Packets out of order 的報錯 同時注意到&#xff0c;有的框架代碼中竟然也會失效&#xff0c;比如 controller 類中&…

Linux:進程間通信(一.初識進程間通信、匿名管道與命名管道、共享內存)

上次結束了基礎IO&#xff1a;Linux&#xff1a;基礎IO&#xff08;三.軟硬鏈接、動態庫和靜態庫、動精態庫的制作和加載&#xff09; 文章目錄 1.認識進程間通信2.管道2.1匿名管道2.2pipe()函數 —創建匿名管道2.3匿名管道的四種情況2.4管道的特征 3.基于管道的進程池設計4.命…

基于java將dicom轉化為jpg的幾種方式

參考1 JAVA代碼實現DICOM文件轉換JPG package com.example;import java.awt.image.BufferedImage; import java.io.File;import javax.imageio.ImageIO;import ij.plugin.DICOM;/*** dicom文件java解析&#xff0c;生成圖片* 不過這里不能解析壓縮的dicom文件*/ public class …

Vue3學習筆記(n.0)

vue指令之v-for 首先創建自定義組件&#xff08;practice5.vue&#xff09;&#xff1a; <!--* Author: RealRoad1083425287qq.com* Date: 2024-07-05 21:28:45* LastEditors: Mei* LastEditTime: 2024-07-05 21:35:40* FilePath: \Fighting\new_project_0705\my-vue-app\…

重載一元運算符

自增運算符 #include<iostream> using namespace std; class CGirl { public:string name;int ranking;CGirl() { name "zhongge"; ranking 5; }void show() const{ cout << "name : "<<name << " , ranking : " <…