日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

判断两个list集合里的对象某个属性值是否一样_第七章 集合框架

發布時間:2025/1/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 判断两个list集合里的对象某个属性值是否一样_第七章 集合框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一節 集合和數組

1.1 為什么使用集合

數組缺點:長度固定,沒有辦法動態擴展

集合框架

集合框架簡化圖

1.2 Collection接口

第二節 List接口

特點:有序、允許重復

  • 有序集合(也稱為序列 )。
    用戶可以通過整數索引(列表中的位置)訪問元素,并搜索列表中的元素。
    與set集合不同,列表通常允許重復的元素

2.2 ArrayList實現類

特點:動態數組;優勢:隨機查詢(可以直接按索引訪問)

  • 可調整大小的數組,實現了List接口
  • 每個ArrayList實例都有一個容量 。 容量是用于存儲列表中的元素的數組的大小。 它總是至少與列表大小一樣大。 當元素添加到ArrayList時,其容量會自動增長。
  • 線程不同步(非線程安全)
package com.test3; ? import java.util.ArrayList; import java.util.Iterator; import java.util.List; ? public class Test1 { ?public static void main(String[] args) {//創建List對象List list = new ArrayList();//添加數據list.add(100);list.add("aaa");list.add(true);list.add(1.234);Student s=new Student("張三",20);list.add(s);//list中可以添加重復的數據list.add(100);list.add("aaa");//打印list中的數據//System.out.println(list);//刪除數據//按數據刪除//list.remove("aaa");//按索引刪除//list.remove(3);//對于整數類型的數據刪除時要轉為Integer類型,否則系統會認為是按索引刪除//Integer:是整形的包裝類對象,也可以表示整數值,但是比int多了很多方法//list.remove(Integer.valueOf(100));//System.out.println(list);//批量刪除//List rl =new ArrayList();//rl.add(true);//rl.add(1.234);//rl.add("aaa");//list.removeAll(rl);//System.out.println(list);//遍歷數據//第一種:使用索引方式循環遍歷/*for(int i=0;i<list.size();i++){Object o = list.get(i);if(o instanceof Student){Student stu=(Student)o;System.out.println("學生信息:"+stu.getName());}System.out.println(o);}*///第二種方式:for in迭代 ,不需要知道集合的長度/*for(Object o : list){//逐一取出list中的數據,存儲到臨時變量o中,然后使用變量System.out.println(o);}*///第三種方式:Iteraotr迭代器迭代集合//通過集合返回迭代器對象,用于遍歷當前集合Iterator it = list.iterator();//it.hasNext():判斷集合是否有元素while(it.hasNext()){//next():獲取集合中的一個元素Object o = it.next();System.out.println(o);}/*boolean b = it.hasNext();if(b){Object o = it.next();System.out.println(o);}b = it.hasNext();if(b){Object o = it.next();System.out.println(o);}*/ } }

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接口
  • 優勢:數據的插入和刪除 效率高
  • 線程不同步
package com.test4; ? import java.util.LinkedList; import java.util.List; ? public class Test1 { ?public static void main(String[] args) {//鏈表集合//List ll =new LinkedList();LinkedList ll =new LinkedList();ll.add("abc");ll.add(100);ll.add(1.234);//在鏈表頭部插入數據ll.addFirst("張三");//在鏈表尾部插入數據ll.addLast("李四");System.out.println(ll.get(2));System.out.println(ll);} } ?

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
package com.test6; ? import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; ? public class Test1 { ?public static void main(String[] args) {//創建Map集合對象Map map = new HashMap();Student s=new Student("張三",20);//以鍵值對的方式存儲數據map.put(1, 100);map.put(2, "aaa");map.put(3, 1.234);map.put("a", 400);map.put("b", s);//輸出mapSystem.out.println(map);//添加重復的鍵:后面鍵值會覆蓋前面的鍵值//map.put(1,1000);//添加重復的值:鍵不允許重復,值允許重復//map.put(4, "aaa");//System.out.println(map);//刪除 鍵值 a的記錄//map.remove("a");//System.out.println(map);//判斷是否包含 b這個鍵值對//System.out.println(map.containsKey("a"));//map中元素的個數//System.out.println(map.size());//單獨獲取map中的某個數據,根據鍵返回數據//System.out.println(map.get(2));//System.out.println(map.get("a"));//遍歷map//第一種: for in 遍歷/*//獲取map中所有鍵的Set集合Set ks = map.keySet();//遍歷鍵的集合,并通過鍵獲取值for(Object k : ks){//單獨返回鍵//System.out.println(k);//根據得到的鍵,獲取對應的值System.out.println(k+" --> "+map.get(k) );}for(Object k : map.keySet()){//單獨返回鍵//System.out.println(k);//根據得到的鍵,獲取對應的值System.out.println(k+" --> "+map.get(k) );}*///第二種:Iterator迭代//Set set = map.keySet();Iterator it =map.keySet().iterator();while(it.hasNext()){//獲取鍵Object k = it.next();System.out.println(k+" ---> "+map.get(k));}} ? } ?

第五節 泛型

為什么實用泛型:

在往集合中存儲數據的時候缺乏類型檢查,不安全

泛型:類型檢查機制;

好處:省略了裝箱和拆箱,效率高;類型安全。

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集合里的对象某个属性值是否一样_第七章 集合框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。