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