android基礎學習-java篇day8-step3-第四節:java集合
什麼是java集合?
java中的集合是工具類,可以儲存任意數量的具有共同屬性的物件
集合和陣列的區別?
陣列:儲存固定長度的資訊
集合:長度不固定,適用於資料動態變化的場景
集合應用場景:
- 無法預測資料儲存的數量
- 同時儲存具有一對一關係的資料
- 需要進行資料的增刪
- 資料重複問題
集合框架的體系結構
List(列表 )
- List是元素有序並且可以重複的集合,稱為序列
- List可以精確的控制每個元素的插入位置,或刪除某個位置的元素
- List的兩個主要實現類是ArrayList和LinkedList
ArrayList概述
- -ArrayList底層是由陣列實現的
- -動態增長,以滿足應用程式的需求
- -在列表尾部插入或刪除資料非常有效
- -更適合查詢和更新元素
- -ArrayList中的元素可以為null
方法的簡單案例1:
package com.demo.day8.list;
import java.util.ArrayList;
import java.util.List;
public class ListDemo1 {
public static void main(String[] args) {
// 用ArrayList儲存程式語言的名稱,並輸出
List list=new ArrayList();
list.add("Java");
list.add("C");
list.add("C++");
list.add("Go");
list.add("Swift");
//輸出列表中元素的個
System.out.println("列表中元素的個數為:"+list.size());
System.out.println("***********************");
//輸出列表中的元素
System.out.println("列表中的元素為:");
for(int i=0;i<list.size();i++){
System.out.print(list.get(i)+",");
}
//移除列表中的++
list.remove(2);
//list.remove("C++");
System.out.println();
System.out.println("移除C++後的列表元素為:");
//增強for迴圈遍歷序列
// for(Object str:list) {
// System.out.print(str+",");
// }
for(int i=0;i<list.size();i++){
System.out.print("第"+(i+1)+"個為"+list.get(i)+",");
}
}
}
輸出:
列表中元素的個數為:5
***********************
列表中的元素為:
Java,C,C++,Go,Swift,
移除C++後的列表元素為:
第1個為Java,第2個為C,第3個為Go,第4個為Swift,
案例2:公告管理
需求:
- -公告的新增和顯示
- -在指定位置處插入公告
- -刪除公告
- -修改公告
公告屬性:
- -編號id
- -標題title
- -建立人creator
- -建立時間creatTime
公告類方法:
- -構造方法
- -獲取和設定屬性的方法
Notice.java
package com.demo.day8.list;
import java.util.Date;
public class Notice {
/*
* 需求:
* -公告的新增和顯示
* -在指定位置處插入公告
* -刪除公告
* -修改公告
*/
/*
* 公告屬性:
* -編號id
* -標題title
* -建立人creator
* -建立時間creatTime
* 公告類方法:
* -構造方法
* -獲取和設定屬性的方法
*/
private int id;
private String title;
private String creator;
private Date createTime;
//帶參參建構函式
public Notice(int id,String title,String creator,Date createTime) {
this.setCreateTime(createTime);
this.setCreator(creator);
this.setId(id);
this.setTitle(title);
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public static void main(String[] args) {
//
}
}
NoticeTest.java
package com.demo.day8.list;
import java.util.ArrayList;
import java.util.Date;
public class NoticeTest {
public static void main(String[] args) {
// 建立公告物件
Notice notice1=new Notice(1,"我是公告1","1",new Date());//取系統當前時間
Notice notice2=new Notice(2,"我是公告2","2",new Date());
Notice notice3=new Notice(3,"我是公告3","3",new Date());
ArrayList noticeList=new ArrayList();
//新增公告
noticeList.add(notice1);
noticeList.add(notice2);
noticeList.add(notice3);
//顯示公告
System.out.println("這裡是公告");
for(int i=0;i<noticeList.size();i++)
{ //強制型別轉換成Notice用getTitle的方式顯示標題
System.out.println((i+1)+"、"+((Notice)(noticeList.get(i))).getTitle());
}
System.out.println("=========指定新增========");
//在第一條公告後面新增新的一條公告
Notice notice4=new Notice(4,"我是公告4","4",new Date());
noticeList.add(1, notice4);
for(int i=0;i<noticeList.size();i++)
{ //強制型別轉換成Notice用getTitle的方式顯示標題
System.out.println((i+1)+"、"+((Notice)(noticeList.get(i))).getTitle());
}
System.out.println("=========刪除=========");
//刪除公告
noticeList.remove(2);
for(int i=0;i<noticeList.size();i++)
{ //強制型別轉換成Notice用getTitle的方式顯示標題
System.out.println((i+1)+"、"+((Notice)(noticeList.get(i))).getTitle());
}
System.out.println("=========修改=========");
notice4.setTitle("我是公告2");
noticeList.set(1, notice4);
for(int i=0;i<noticeList.size();i++)
{ //強制型別轉換成Notice用getTitle的方式顯示標題
System.out.println((i+1)+"、"+((Notice)(noticeList.get(i))).getTitle());
}
}
}
輸出結果:
這裡是公告
1、我是公告1
2、我是公告2
3、我是公告3
=========指定新增========
1、我是公告1
2、我是公告4
3、我是公告2
4、我是公告3
=========刪除=========
1、我是公告1
2、我是公告4
3、我是公告3
=========修改=========
1、我是公告1
2、我是公告2
3、我是公告3
Set
set是元素無序並且不可以重複的集合,被稱為集
HashSet
- HashSet是Set的一個重要實現類,稱為雜湊集
- HashSet的元素無序並且不可以重複
- HashSet中只允許一個null元素
- 具有良好的存取和查詢效能
案例:用HashSet儲存多個表示顏色額英文單詞,並輸出
- 單詞包括:“blue”、“red”、“black”、“yellow”和“white”
Iterator(迭代器)
- Iterator介面可以統一的方式對各種集合元素進行遍歷
- hasNext()方法檢查集合中是否還有下一個元素
- next()方法返回集合中的下一個元素
WordDemo.java
package com.demo.day8.list;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class WordDemo {
public static void main(String[] args) {
// 將英文單詞新增到HashSet中
//用Set的引用指向HashSet的物件
Set set=new HashSet();
//向集合新增元素
set.add("blue");
set.add("red");
set.add("black");
set.add("yellow");
set.add("white");
//顯示集合的內容
System.out.println("顯示集合內容");
//迭代器
Iterator it=set.iterator();
//遍歷迭代器並輸出元素 has.Next()檢查集合中是否還有下一個元素
while(it.hasNext())
{
System.out.print(it.next()+"、");
}
System.out.println();
//在集合中插入一個新的單詞
set.add("white");
it=set.iterator();
while(it.hasNext()) {
System.out.print(it.next()+"、");
}
//插入失敗。但是不會報錯
}
}
案例:寵物貓資訊管理
需求:
- -新增和顯示寵物貓的資訊
- -查詢某隻寵物貓的資訊並輸出
- -修改寵物貓的資訊
- -刪除寵物貓的資訊
屬性:
- -名字name
- -年齡month
- -品種species
方法:
- -構造方法
- -獲取和設定屬性值的方法
- -其他方法
Cat.java
package com.demo.day8.list;
public class Cat {
// 寵物貓的案例
private String name;
private int age;
private String sex;
private String species;
public Cat() {
}
// Cat有參構造
public Cat(String name, int age, String sex, String species) {
this.setAge(age);
this.setSpecies(species);
this.setName(name);
this.setSex(sex);
}
public static void main(String[] args) {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getSpecies() {
return species;
}
public void setSpecies(String species) {
this.species = species;
}
// 重寫hashCode的方法和equals方法
//如果兩個物件hashCode不相等,就是不相等
//如果兩個物件hashCode相等,還要用equals還確定他們屬性是否相等
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((sex == null) ? 0 : sex.hashCode());
result = prime * result + ((species == null) ? 0 : species.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj.getClass() == Cat.class) {
Cat cat = (Cat) obj;
return (cat.getAge()==age)&&cat.getName().equals(name) && cat.getSex().equals(sex) && cat.getSpecies().equals(species);
}
return false;
}
// 重寫toString的方法
@Override
public String toString() {
return "Cat [姓名=" + name + ", 年齡=" + age + ", 性別=" + sex + ", 品種=" + species + "]";
}
}
CatTest.java
package com.demo.day8.list;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class CatTest {
public static void main(String[] args) {
System.out.println("===========新增和顯示貓的資訊===========");
// 新增和顯示貓的資訊
Cat one=new Cat("tutu",1,"男","中華田園貓");
Cat two=new Cat("huahua",2,"女","波斯貓");
Cat three=new Cat("niuniu",3,"女","本地貓");
Set<Cat> set=new HashSet<Cat>();
//新增資訊
set.add(one);
set.add(two);
set.add(three);
//顯示資訊 迭代器 //<Cat>限制換型
Iterator<Cat> it=set.iterator();
while(it.hasNext()) {
System.out.println(it.next()+",");//重寫toString顯示字串
}
System.out.println("===========新增重複的一隻貓的資訊===========");
Cat four=new Cat("niuniu",3,"女","本地貓");
set.add(four);
//顯示資訊 迭代器
//自定義類重寫hashCode和equals方法
Iterator<Cat> it2=set.iterator();
while(it2.hasNext()) {
System.out.println(it2.next()+",");//重寫toString顯示字串
}
System.out.println("===========查詢的一隻貓的資訊並顯示===========");
//通過該名字查詢
boolean flag=false;
Cat c=null;
//放到迭代器中
it=set.iterator();
//遍歷內容
while(it.hasNext()) {
c=(Cat)it.next();//強制轉換
if(c.getName().equals("huahua")) {
flag=true;//找到了
break;
}
}
if(flag)
{ System.out.println("找到了");
System.out.println(c);//輸出查到的結果
}
else
System.out.println("沒找到");
System.out.println("===========刪除的指定名字為huahua的貓的資訊並重新顯示===========");
//增強for迴圈
for(Cat cat:set) {
if("huahua".equals(cat.getName()))
set.remove(cat);break;
}
for(Cat cat:set) {
System.out.println(cat);
}
System.out.println("===========刪除的指定某個範圍貓的資訊並重新顯示===========");
//刪除年齡小於3的
Set<Cat> set1=new HashSet<Cat>();
for(Cat cat:set) {
if(cat.getAge()<3)
{
set1.add(cat);//將查詢到的裝到一個新的序列物件中
}
}
set.removeAll(set1);//通過remove一個新的序列物件,來刪除這一塊
for(Cat cat:set) {
System.out.println(cat);
}
//
// System.out.println("===========刪除的所有隻貓的資訊並重新顯示===========");
// boolean flag1=set.removeAll(set);
// if(flag1)
// System.out.println("貓都不見了");
// else
// System.out.println("貓還在");
}
}
輸出結果:
===========新增和顯示貓的資訊===========
Cat [姓名=tutu, 年齡=1, 性別=男, 品種=中華田園貓],
Cat [姓名=huahua, 年齡=2, 性別=女, 品種=波斯貓],
Cat [姓名=niuniu, 年齡=3, 性別=女, 品種=本地貓],
===========新增重複的一隻貓的資訊===========
Cat [姓名=tutu, 年齡=1, 性別=男, 品種=中華田園貓],
Cat [姓名=huahua, 年齡=2, 性別=女, 品種=波斯貓],
Cat [姓名=niuniu, 年齡=3, 性別=女, 品種=本地貓],
===========查詢的一隻貓的資訊並顯示===========
找到了
Cat [姓名=huahua, 年齡=2, 性別=女, 品種=波斯貓]
===========刪除的指定名字為huahua的貓的資訊並重新顯示===========
Cat [姓名=tutu, 年齡=1, 性別=男, 品種=中華田園貓]
Cat [姓名=huahua, 年齡=2, 性別=女, 品種=波斯貓]
Cat [姓名=niuniu, 年齡=3, 性別=女, 品種=本地貓]
===========刪除的指定某個範圍貓的資訊並重新顯示===========
Cat [姓名=niuniu, 年齡=3, 性別=女, 品種=本地貓]
Map概述
- Map中的資料是以鍵值對(Key-value)的形式儲存
- Key-value以Entry型別的物件例項存在
- 可以通過Key值快速地查詢value
- 一個對映不能包含重複的鍵
- 每個鍵最多隻能對映到一個值
HashMap
- 基於雜湊表的Map介面的實現
- 允許使用null值和null鍵
- key值不允許重複
- HashMap中Entry的物件是無序排列的
增強for迴圈:
語法格式:
for(資料型別 變數名 :遍歷的目標){ //資料型別 變數名:宣告一個變數用來接收遍歷目標遍歷後的元素 }
HashMap案例:
/*完成一個類似字典功能
* 1、新增單詞以及單詞的註釋儲存在HashMap當中
* 2、顯示HashMap中的內容
* 3、查詢某個單詞的註釋並顯示
*/
MapDemo.java
package com.demo.day8.list;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
public class MapDemo {
/*完成一個類似字典功能
* 1、新增單詞以及單詞的註釋儲存在HashMap當中
* 2、顯示HashMap中的內容
* 3、查詢某個單詞的註釋並顯示
*/
public static void main(String[] args) {
// map引用指向HaspMap物件 Map<K,V> 泛值
Map<String,String> map=new HashMap<String,String>();
System.out.println("請輸入三組單詞對應的註釋,並存放到HashMao中");
Scanner console=new Scanner(System.in);
//從鍵盤中輸入值
//新增
int i=0;
while(i<3) {
System.out.println("請輸入key值:");
String key=console.next();
System.out.println("請輸入value值:");
String value=console.next();
map.put(key, value);//將鍵值存檔map中
i++;
}
//列印輸出value的值(直接使用迭代器)
Iterator<String> it=map.values().iterator();
while(it.hasNext()) {
System.out.print(it.next()+" ");
}
System.out.println();
System.out.println("=========================");
System.out.println("列印輸出key-value的值 通過entrySet方法得到key-value");
//列印輸出key-value的值 通過entrySet方法得到key-value
Set<Entry<String,String>> entrySet=map.entrySet();
for(Entry<String,String>entry:entrySet)
{
//entry.getValue();
//entry.getKey();
System.out.println(entry.getKey()+"-"+entry.getValue());
}
//通過單詞找到註釋並輸出
System.out.println("請輸入你要找的vaule對應的key!");
String strSearch=console.next();
boolean flag=false;
//使用KeySet()
//1取得keySet
Set<String> keySet=map.keySet();
//2遍歷keySet
for(String key:keySet) {
if(strSearch.equals(key)) {
flag=true;
System.out.println("找到了!鍵值對為"+key+"-"+map.get(key));
break;
}
}
if(!flag)
System.out.println("找不到!");
}
}
輸出結果:
請輸入三組單詞對應的註釋,並存放到HashMao中
請輸入key值:
a
請輸入value值:
A
請輸入key值:
b
請輸入value值:
B
請輸入key值:
c
請輸入value值:
C
A B C
=========================
列印輸出key-value的值 通過entrySet方法得到key-value
a-A
b-B
c-C
a
找到了!鍵值對為a-A
案例2:商品資訊管理
/*
* 分析商品資訊類
* 屬性:
* -商品編號:id
* -商品名稱:name
* -商品價格:price
* 方法:
* -構造方法
* -獲取和設定屬性值的方法
* -其他方法
*/
package com.demo.day8.list;
/*
* 分析商品資訊類
* 屬性:
* -商品編號:id
* -商品名稱:name
* -商品價格:price
* 方法:
* -構造方法
* -獲取和設定屬性值的方法
* -其他方法
*/
public class Goods {
private String goodsId;
private String goodsName;
private double goodsPrice;
public Goods(String goodsId,String goodsName,double goodsPrice) {
this.setGoodsId(goodsId);
this.setGoodsName(goodsName);
this.setGoodsPrice(goodsPrice);
}
public String getGoodsId() {
return goodsId;
}
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public double getGoodsPrice() {
return goodsPrice;
}
public void setGoodsPrice(double goodsPrice) {
this.goodsPrice = goodsPrice;
}
//toString方法
public String toString() {
String str="商品編號:"+goodsId+" "+"商品名稱:"+goodsName+" "+"商品價格:"+goodsPrice;
return str;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
GoodsTest.java
package com.demo.day8.list;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
public class GoodsTest {
/*
* 使用HashMap對商品資訊進行管理
* -其中key為商品編號,value為商品物件
* HashMap中的商品資訊進行增、刪、改、查
*/
public static void main(String[] args) {
Scanner console=new Scanner(System.in);
// 定義HashMap物件
Map<String,Goods> map=new HashMap<String,Goods>();
System.out.println("請輸入三條商品資訊:");
int i=0;
while(i<3) {
System.out.println("請輸入第"+(i+1)+"條商品資訊");
System.out.println("請輸入商品的編號:");
String goodsId=console.next();
if(map.containsKey(goodsId)) {//如果編號已經存在
System.out.println("商品編號已經存在");
continue;//程式繼續執行上一條
}
System.out.println("請輸入商品的的名稱:");
String goodsName=console.next();
try {//如果有需要錯誤的id,會處理這個異常,不影響程式正常執行
System.out.println("請輸入商品的的價格:");
}catch(Exception e) {
System.out.println("商品價格輸入格式錯誤");
console.next();
continue;
}
double goodsPrice=console.nextDouble();
Goods goods=new Goods(goodsId, goodsName, goodsPrice);
//將商品資訊新增到HashMap中
map.put(goodsId,goods);
i++;
}
//遍歷Map,輸出商品資訊
System.out.println("商品全部資訊為:");
Iterator<Goods> it=map.values().iterator();
while(it.hasNext())
System.out.println(it.next());
}
}
輸出:
請輸入三條商品資訊:
請輸入第1條商品資訊
請輸入商品的編號:
1
請輸入商品的的名稱:
1
請輸入商品的的價格:
1
請輸入第2條商品資訊
請輸入商品的編號:
2
請輸入商品的的名稱:
2
請輸入商品的的價格:
2
請輸入第3條商品資訊
請輸入商品的編號:
3
請輸入商品的的名稱:
3
請輸入商品的的價格:
3
商品全部資訊為:
商品編號:1 商品名稱:1 商品價格:1.0
商品編號:2 商品名稱:2 商品價格:2.0
商品編號:3 商品名稱:3 商品價格:3.0
相關文章
- android基礎學習-java篇day7-step3-第三節:java字串AndroidJava字串
- 【JAVA】【面試】【基礎篇】- 集合Java面試
- android基礎學習-java篇day9-step3-第五節:java執行緒AndroidJava執行緒
- JAVA基礎學習篇之反射Java反射
- 基礎篇:JAVA集合,面試專用Java面試
- 零基礎學Java第四節(字串相關類)Java字串
- android基礎學習-java篇day10-step3-第六節:java輸入輸出流AndroidJava
- 【Java基礎】集合Java
- Android基礎之Java集合框架CollectionAndroidJava框架
- JAVA學習--JAVA基礎(一)Java
- Java基礎學習Java
- Java基礎-集合框架Java框架
- 【Java 反射學習】Java 反射基礎Java反射
- [Java 反射學習] Java 反射基礎Java反射
- Android面試之Java 基礎篇Android面試Java
- Java學習關於集合框架的基礎介面--Collection介面Java框架
- java基礎學習之九:集合型別Set/List/MapJava型別
- java基礎的學習Java
- java基礎詳解-集合Java
- 傳智黑馬java基礎學習——day20(集合Map)Java
- JAVA基礎 練習-13-ArrayList集合學生物件遍歷Java物件
- Java基礎篇Java
- Java集合框架學習Java框架
- 學習Java: CopyOnWrite集合Java
- java基礎學習(目錄)Java
- Java基礎 快速學習(二)Java
- Java基礎 快速學習(三)Java
- Java基礎 快速學習(四)Java
- java語言基礎學習Java
- java基礎學習之--XMLJavaXML
- Java基礎學習筆記Java筆記
- Java 基礎學習系列一 —— Java 主要特性Java
- [Java基礎]Java總結篇Java
- 第65節:Java後端的學習之Spring基礎Java後端Spring
- 經典書籍_java學習基礎程式設計篇Java程式設計
- java集合框架基礎總結Java框架
- Java基礎之淺談集合Java
- 【Java基礎知識】Java陣列與集合Java陣列