深入剖析java中的集合框架
解析:如果并不知道程序運(yùn)行時(shí)會(huì)需要多少對(duì)象,或者需要更復(fù)雜方式存儲(chǔ)對(duì)象,那么可以使用Java集合框架。
如果啟用集合的刪除方法,那么集合中所有元素的索引會(huì)自動(dòng)維護(hù)。
集合完全彌補(bǔ)了數(shù)組的缺陷。
02.集合框架的內(nèi)容
集合框架都包含三大塊內(nèi)容:對(duì)外的接口,接口的實(shí)現(xiàn)和對(duì)集合運(yùn)算的算法
01.接口:表示集合的抽象數(shù)據(jù)類(lèi)型
02.實(shí)現(xiàn):集合框架中接口的具體實(shí)現(xiàn)
03.算法:在一個(gè)實(shí)現(xiàn)了某個(gè)集合框架的接口的對(duì)象身上完成某種有用的計(jì)算方法
java集合框架簡(jiǎn)圖:

01.Collection接口存在儲(chǔ)存一組不唯一(允許重復(fù)),無(wú)序的對(duì)象
02.Set接口繼承Collection接口,存儲(chǔ)一組唯一(不允許重復(fù)),無(wú)序的對(duì)象
03.List接口繼承Collection接口,存儲(chǔ)一組不唯一(允許重復(fù)),有序(以元素插入的次序來(lái)放置元素,不會(huì)重新排列)的對(duì)象
04.Map接口存儲(chǔ)一組成對(duì)的鍵-值對(duì)象,提供key(鍵)到value(值)的映射。Map中的key不要求有序,不允許重復(fù)。value同樣不要求有序,但允許重復(fù)。
05.Iterator接口是負(fù)責(zé)定義訪(fǎng)問(wèn)和遍歷元素的接口。
下面開(kāi)始介紹:
1.List接口
List接口繼承Collection接口,存儲(chǔ)一組不唯一(允許重復(fù)),有序(以元素插入的次序來(lái)放置元素,不會(huì)重新排列)的對(duì)象
實(shí)現(xiàn)List接口的常用類(lèi)有ArrayList和LinkedList
ArrayList對(duì)數(shù)組進(jìn)行了封裝,實(shí)現(xiàn)了長(zhǎng)度可變的數(shù)組
LinkedList采用鏈表存儲(chǔ)方式,其優(yōu)點(diǎn)在于插入,刪除元素時(shí)效率比較高
01.ArrayList集合類(lèi)
package cn.day001;
public class Penguin {
private String name="無(wú)名氏";
private String sex="Q仔";
public Penguin() {
}
public Penguin(String name, String sex) {
this.name = name;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
測(cè)試類(lèi):
package cn.day001;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
//上機(jī)1 ArrayList集合類(lèi)
public class Test {
public static void main(String[] args) {
//1.創(chuàng)建多個(gè)企鵝對(duì)象
Penguin penguin=new Penguin("楠楠","Q仔");
Penguin penguin2=new Penguin("花花","Q妹");
Penguin penguin3=new Penguin("哲哲","Q妹");
//2.創(chuàng)建Arraylist集合對(duì)象并把2個(gè)企鵝對(duì)象放到其中
List<Penguin> penguins=new ArrayList<Penguin>();
penguins.add(penguin);
penguins.add(penguin2);
penguins.add(penguin3);
//3.輸出集合中企鵝的數(shù)量
System.out.println("共計(jì)有"+penguins.size()+"只企鵝");
//4.通過(guò)遍歷集合顯示
for (int i = 0; i < penguins.size(); i++) {
Penguin pg=(Penguin)penguins.get(i);
System.out.println(pg.getName()+"\t"+pg.getSex());
}
//5.刪除集合中哲哲企鵝
penguins.remove(penguin3);
//6.判斷集合中是否還存在哲哲企鵝
if (penguins.contains(penguin3)) {
System.out.println("存在哲哲企鵝");
}else {
System.out.println("不存在哲哲企鵝");
}
System.out.println();
//7.使用iterator迭代遍歷
System.out.println("使用iterator遍歷");
Iterator<Penguin> its=penguins.iterator();
while (its.hasNext()) {
Penguin pg =its.next();
System.out.println("名字"+pg.getName()+"\t性別"+pg.getSex());
}
System.out.println();
//8.使用foreach遍歷
System.out.println("使用foreach遍歷");
for (Penguin pg : penguins) {
System.out.println("名字"+pg.getName()+"\t性別"+pg.getSex());
}
}
}
02.LinkedList集合類(lèi)

package cn.day001;
import java.util.LinkedList;
//測(cè)試LinkedList的多個(gè)特殊方法
public class Test2 {
public static void main(String[] args) {
//1.創(chuàng)建多個(gè)企鵝對(duì)象
Penguin penguin=new Penguin("楠楠","Q仔");
Penguin penguin2=new Penguin("花花","Q妹");
Penguin penguin3=new Penguin("哲哲","Q妹");
//2.創(chuàng)建Arraylist集合對(duì)象并把2個(gè)企鵝對(duì)象放到其中
//List<Penguin> penguins=new ArrayList<Penguin>();
LinkedList<Penguin> penguins=new LinkedList<Penguin>();
penguins.add(penguin);
penguins.add(penguin2);
penguins.add(penguin3);
//3.輸出集合中企鵝的數(shù)量
System.out.println("共計(jì)有"+penguins.size()+"只企鵝");
//4.查看集合中第一只企鵝的昵稱(chēng)
Penguin firstpenguins=penguins.getFirst();
System.out.println("第一只企鵝的昵稱(chēng)是:"+firstpenguins.getName());
//5.查看集合中最后一只企鵝的昵稱(chēng)
Penguin lastpenguins=penguins.getLast();
System.out.println("最后一只企鵝的昵稱(chēng)是:"+lastpenguins.getName());
//6.刪除第一只企鵝和最后一只企鵝
penguins.removeFirst();
penguins.removeLast();
System.out.println("刪除后企鵝數(shù)"+penguins.size());
}
}
2.Map接口

01.HashMap集合類(lèi)
package cn.day002;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
//上機(jī)2 根據(jù)寵物昵稱(chēng)查找寵物 上機(jī)3 使用iterator迭代遍歷
public class Test {
public static void main(String[] args) {
Map<String, String> pet=new HashMap<String, String>();
pet.put("嘻嘻", "狗狗");
pet.put("哈哈", "企鵝");
pet.put("呵呵", "貓貓");
Scanner input=new Scanner(System.in);
System.out.println("請(qǐng)輸入寵物昵稱(chēng):");
String name=input.next();
if (pet.containsKey(name)) {
String petname=pet.get(name);
System.out.println(name+"對(duì)應(yīng)的寵物"+petname);
}else {
System.out.println("對(duì)不起,沒(méi)有此昵稱(chēng)對(duì)應(yīng)的寵物");
}
System.out.println();
//使用iterator迭代遍歷
System.out.println("使用iterator遍歷");
Set<String> keys=pet.keySet();//取出所有的key的值
Iterator<String> it=keys.iterator();//獲取Iteratoer對(duì)象
while (it.hasNext()) {
String key = (String) it.next();//取出key值
String pets=pet.get(key);//根據(jù)key取出對(duì)應(yīng)的值
System.out.println("key值:"+key+"\tvalue值:"+pets);
}
}
}
以上這篇深入剖析java中的集合框架就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis使用foreach語(yǔ)句實(shí)現(xiàn)IN查詢(xún)(三種)
這篇文章主要介紹了mybatis使用foreach語(yǔ)句實(shí)現(xiàn)IN查詢(xún)(三種),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
SpringBoot整合Quartz實(shí)現(xiàn)定時(shí)任務(wù)詳解
這篇文章主要介紹了Java?任務(wù)調(diào)度框架?Quartz,Quartz是OpenSymphony開(kāi)源組織在Job?scheduling領(lǐng)域又一個(gè)開(kāi)源項(xiàng)目,完全由Java開(kāi)發(fā),可以用來(lái)執(zhí)行定時(shí)任務(wù),類(lèi)似于java.util.Timer。,下面我們來(lái)學(xué)習(xí)一下關(guān)于?Quartz更多的詳細(xì)內(nèi)容,需要的朋友可以參考一下2022-08-08
Spring?BeanFactory工廠(chǎng)使用教程
Spring的本質(zhì)是一個(gè)bean工廠(chǎng)(beanFactory)或者說(shuō)bean容器,它按照我們的要求,生產(chǎn)我們需要的各種各樣的bean,提供給我們使用。只是在生產(chǎn)bean的過(guò)程中,需要解決bean之間的依賴(lài)問(wèn)題,才引入了依賴(lài)注入(DI)這種技術(shù)2023-02-02
java外部類(lèi)與內(nèi)部類(lèi)簡(jiǎn)介
這篇文章簡(jiǎn)單介紹了java外部類(lèi)與內(nèi)部類(lèi),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
如何批量測(cè)試Mybatis項(xiàng)目中的Sql是否正確詳解
這篇文章主要給大家介紹了關(guān)于如何批量測(cè)試Mybatis項(xiàng)目中Sql是否正確的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
java插入排序和希爾排序?qū)崿F(xiàn)思路及代碼
這篇文章主要介紹了插入排序和希爾排序兩種排序算法,文章通過(guò)代碼示例和圖解詳細(xì)介紹了這兩種排序算法的實(shí)現(xiàn)過(guò)程和原理,需要的朋友可以參考下2025-03-03
Spring?@Bean注解深入分析源碼執(zhí)行過(guò)程
隨著SpringBoot的流行,我們現(xiàn)在更多采用基于注解式的配置從而替換掉了基于XML的配置,所以本篇文章我們主要探討基于注解的@Bean以及和其他注解的使用2023-01-01
Java?Date(日期)對(duì)象進(jìn)行格式化的思路詳解
Date類(lèi)是經(jīng)常會(huì)使用到的一個(gè)用來(lái)處理日期、時(shí)間的一個(gè)類(lèi)。Date類(lèi)是在java.util包下的Date類(lèi),這篇文章主要介紹了Java?Date(日期)對(duì)象如何進(jìn)行格式化呢,需要的朋友可以參考下2022-09-09
Java ThreadLocal詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
ThreadLocal,很多地方叫做線(xiàn)程本地變量,也有些地方叫做線(xiàn)程本地存儲(chǔ),本文會(huì)詳細(xì)的介紹一下,有興趣的可以了解一下2017-06-06

