判断两个list集合里的对象某个属性值是否一样_第七章 集合框架
生活随笔
收集整理的這篇文章主要介紹了
判断两个list集合里的对象某个属性值是否一样_第七章 集合框架
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
第一節(jié) 集合和數(shù)組
1.1 為什么使用集合
數(shù)組缺點(diǎn):長(zhǎng)度固定,沒(méi)有辦法動(dòng)態(tài)擴(kuò)展
集合框架
集合框架簡(jiǎn)化圖
1.2 Collection接口
第二節(jié) List接口
特點(diǎn):有序、允許重復(fù)
- 有序集合(也稱(chēng)為序列 )。
用戶(hù)可以通過(guò)整數(shù)索引(列表中的位置)訪問(wèn)元素,并搜索列表中的元素。
與set集合不同,列表通常允許重復(fù)的元素
2.2 ArrayList實(shí)現(xiàn)類(lèi)
特點(diǎn):動(dòng)態(tài)數(shù)組;優(yōu)勢(shì):隨機(jī)查詢(xún)(可以直接按索引訪問(wèn))
- 可調(diào)整大小的數(shù)組,實(shí)現(xiàn)了List接口
- 每個(gè)ArrayList實(shí)例都有一個(gè)容量 。 容量是用于存儲(chǔ)列表中的元素的數(shù)組的大小。 它總是至少與列表大小一樣大。 當(dāng)元素添加到ArrayList時(shí),其容量會(huì)自動(dòng)增長(zhǎng)。
- 線程不同步(非線程安全)
equals方法的使用:
public static void main(String[] args) {String str1="你好";String str2="你好";String str3 = new String("你好");//System.out.println(str1==str2);//System.out.println(str1==str3);//System.out.println(str1.equals(str3));Student s1=new Student("張三",21);Student s2=new Student("張三",20);System.out.println(s1==s2);System.out.println(s1.equals(s2)); }package com.test3; ? public class Student {private String name;private int age;public Student(String name,int age){this.name=name;this.age=age;} ?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;}?//重寫(xiě)equals方法,實(shí)現(xiàn)Student的內(nèi)容比較@Overridepublic boolean equals(Object obj) {System.out.println("=========調(diào)用了equals==========");//先判斷比較的目標(biāo)對(duì)象是否是學(xué)生,如果不是學(xué)生則直接返回falseif(!(obj instanceof Student)){return false;}//說(shuō)明目標(biāo)對(duì)象是學(xué)生,通過(guò)向下轉(zhuǎn)型(拆箱),獲取學(xué)生對(duì)象Student stu = (Student)obj;//如果學(xué)生對(duì)象的名字和年齡都相等,則兩個(gè)學(xué)生的內(nèi)容相等if(this.name.equals(stu.getName()) && this.age==stu.getAge()){return true;}//如果有任何屬性不相等,則返回falsereturn false;} ?@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";} }public static void main(String[] args) {List list = new ArrayList();list.add(100);list.add("aaa");list.add(1.234);Student s1=new Student("張三",20);list.add(s1);System.out.println(list);//list.remove(s1);Student s2=new Student("張三",20);//沒(méi)有equals按地址比較,不能刪掉,重寫(xiě)之后,按內(nèi)容比較可以刪掉list.remove(s2);System.out.println(list);}2.3 LinkedList 實(shí)現(xiàn)類(lèi)
- 雙鏈表實(shí)現(xiàn)了List和Deque接口
- 優(yōu)勢(shì):數(shù)據(jù)的插入和刪除 效率高
- 線程不同步
2.4 Vector實(shí)現(xiàn)類(lèi)
基本實(shí)現(xiàn)和ArrayList相同,實(shí)現(xiàn)了線程同步
2.5 Iterator 迭代器
Iterator常用方法:
第三節(jié) Set接口及其實(shí)現(xiàn)類(lèi)
3.1 Set接口
- 不包含重復(fù)元素的集合
- 無(wú)序的
- 根據(jù)equals()方法判斷是否相等,hashcode()判斷
3.2 HashSet 實(shí)現(xiàn)類(lèi)
- 此類(lèi)實(shí)現(xiàn)Set接口,由哈希表(實(shí)際為HashMap實(shí)例)支持
- 線程不同步
Set避免對(duì)象重復(fù)的規(guī)則:
1.先判斷hashCode值是否一樣
2.在hashCode一樣的前提下,再調(diào)用equals方法
package com.test5; ? public class Student {private String name;private int age;public Student(String name,int age){this.name=name;this.age=age;} ?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;}@Overridepublic int hashCode() {return this.name.hashCode()+this.age;//return 100;} ?//重寫(xiě)equals方法,實(shí)現(xiàn)Student的內(nèi)容比較@Overridepublic boolean equals(Object obj) {System.out.println("=========調(diào)用了equals==========");//先判斷比較的目標(biāo)對(duì)象是否是學(xué)生,如果不是學(xué)生則直接返回falseif(!(obj instanceof Student)){return false;}//說(shuō)明目標(biāo)對(duì)象是學(xué)生,通過(guò)向下轉(zhuǎn)型(拆箱),獲取學(xué)生對(duì)象Student stu = (Student)obj;//如果學(xué)生對(duì)象的名字和年齡都相等,則兩個(gè)學(xué)生的內(nèi)容相等if(this.name.equals(stu.getName()) && this.age==stu.getAge()){return true;}//如果有任何屬性不相等,則返回falsereturn false;} ?@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";} } ?public static void main(String[] args) {//Set:隨機(jī)存儲(chǔ),不允許重復(fù)//Hash:哈希 散列Set set = new HashSet();set.add(100);set.add("abc");set.add(true);set.add(1.234);Student s=new Student("張三",20);set.add(s);//輸出內(nèi)容:數(shù)據(jù)隨機(jī)分布System.out.println(set);//添加重復(fù)元素:不允許重復(fù),重復(fù)的內(nèi)容不會(huì)被添加set.add(100);set.add("abc");//又添加一個(gè)張三 20Student s2=new Student("張三",20);//Set避免對(duì)象重復(fù)的規(guī)則:1.先判斷hashCode值是否一樣 // 2.在hashCode一樣的前提下,再調(diào)用equals方法set.add(s2);System.out.println(set);}第四節(jié) Map接口及其實(shí)現(xiàn)類(lèi)
4.1 Map接口
- 存儲(chǔ):鍵值對(duì):key-value
- 鍵值不能重復(fù),可以有一個(gè)null
第五節(jié) 泛型
為什么實(shí)用泛型:
在往集合中存儲(chǔ)數(shù)據(jù)的時(shí)候缺乏類(lèi)型檢查,不安全
泛型:類(lèi)型檢查機(jī)制;
好處:省略了裝箱和拆箱,效率高;類(lèi)型安全。
List<E>:E類(lèi)型約束 Map<K,V>:K,V類(lèi)型約束package com.test7; ? import java.util.ArrayList; import java.util.List; ? public class Test1 { ?public static void main(String[] args) {//非泛型List集合//1.可以存儲(chǔ)各種類(lèi)型的數(shù)據(jù)//2.獲取數(shù)據(jù)的時(shí)候,直接獲取的是Object數(shù)據(jù),需要判斷之后,轉(zhuǎn)型才能使用數(shù)據(jù)的特定方法/*List list = new ArrayList();list.add(100);list.add("abc");list.add(new Car("寶馬",200));for(int i=0;i<list.size();i++){//2.獲取數(shù)據(jù)的時(shí)候,直接獲取的是Object數(shù)據(jù),需要判斷之后,轉(zhuǎn)型才能使用數(shù)據(jù)的特定方法Object o = list.get(i);if(o instanceof Car){Car c = (Car)o;System.out.println(c.getBrand()+" "+c.getPrice());}else{System.out.println(o);}}*///泛型集合//1.泛型集合只能存儲(chǔ)特定類(lèi)型的數(shù)據(jù) //2.獲取數(shù)據(jù)的之后,可以直接得到特定類(lèi)型的數(shù)據(jù),不需要轉(zhuǎn)型List<Car> list = new ArrayList<Car>();list.add(new Car("寶馬",200));list.add(new Car("奔馳",250));list.add(new Car("法拉利",300));for(int i=0;i<list.size();i++){Car c = list.get(i);System.out.println(c.getBrand()+" "+c.getPrice());}} ? }package com.test10; ? import java.util.ArrayList; import java.util.List; import java.util.Scanner; ? public class Test { ?public static void main(String[] args) {//定義商品存儲(chǔ)結(jié)構(gòu)List<Goods> goodsList =new ArrayList<Goods>();goodsList.add(new Goods("酸奶",2.5,"食品"));goodsList.add(new Goods("面包",5.5,"食品"));goodsList.add(new Goods("奶茶",5.5,"飲品"));//綜合練習(xí):商品的添加,刪除,查詢(xún)Scanner sc=new Scanner(System.in);System.out.println("===========歡迎使用XXX超市管理系統(tǒng)=================");while(true){System.out.println("請(qǐng)選擇:1.查詢(xún)商品 2.添加商品 3.刪除商品 4.退出");int choose = sc.nextInt();if(choose==1){System.out.println("你選擇了查詢(xún)商品");//遍歷商品System.out.println("編號(hào)t名稱(chēng)t價(jià)格t分類(lèi)");for(int i=0;i<goodsList.size();i++){Goods g=goodsList.get(i);System.out.println((i+1)+"t"+g.getName()+"t"+g.getPrice()+"t"+g.getCategory());}//for(Goods g: goodsList){// System.out.println(g.getName()+"t"+g.getPrice()+"t"+g.getCategory());//}}else if(choose==2){System.out.println("你選擇了添加商品");//讓用戶(hù)輸入名稱(chēng),輸入價(jià)格,輸入分類(lèi)System.out.println("請(qǐng)輸入商品名稱(chēng):");String gname = sc.next();System.out.println("請(qǐng)輸入商品價(jià)格:");double gprice = sc.nextDouble();System.out.println("請(qǐng)輸入商品分類(lèi):");String gcate = sc.next();//構(gòu)建商品對(duì)象Goods mygoods = new Goods(gname,gprice,gcate);//將商品對(duì)象添加到list中g(shù)oodsList.add(mygoods);}else if(choose==3){System.out.println("你選擇了刪除商品");//1.讓用戶(hù)選擇要?jiǎng)h除的商品編號(hào) 3.刪除System.out.println("請(qǐng)輸入要?jiǎng)h除的商品編號(hào):");int delNo = sc.nextInt();//從List中刪除指定編號(hào)位置(編號(hào)-1)的商品goodsList.remove(delNo-1);}else if(choose==4){System.out.println("退出系統(tǒng)");break;}else{System.out.println("選擇錯(cuò)誤,請(qǐng)重新選擇");}}System.out.println("======歡迎下次使用========");} ? } ?作業(yè)
構(gòu)建一個(gè)學(xué)生集合,定義方法實(shí)現(xiàn)添加、修改、刪除、查找、遍歷等功能;
總結(jié)
以上是生活随笔為你收集整理的判断两个list集合里的对象某个属性值是否一样_第七章 集合框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 查看docker运行状态_docker商
- 下一篇: tensorflow 按维度相加_人工智