版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、關(guān)于對象群體的組織第一張,PPT共一百零八頁,創(chuàng)作于2022年6月2目錄7.1 對象數(shù)組7.3 集合(Collection, Map)7.4 本章小結(jié)第二張,PPT共一百零八頁,創(chuàng)作于2022年6月37.1 對象數(shù)組數(shù)組在Java提供的存儲及隨機(jī)訪問對象序列的各種方法中,數(shù)組是效率最高的一種類型檢查邊界檢查優(yōu)點(diǎn)數(shù)組知道其元素的類型編譯時(shí)的類型檢查大小已知代價(jià)數(shù)組對象的大小是固定的,在生存期內(nèi)大小不可變第三張,PPT共一百零八頁,創(chuàng)作于2022年6月4對象數(shù)組數(shù)組元素是類的對象所有元素具有相同的類型每個(gè)元素都是一個(gè)對象的引用對象數(shù)組7.1 對象數(shù)組(續(xù))第四張,PPT共一百零八頁,創(chuàng)作于2022
2、年6月5靜態(tài)初始化:在聲明和定義數(shù)組的同時(shí)對數(shù)組元素進(jìn)行初始化,例如:BankAccount accounts = new BankAccount(“Zhang, 100.00), new BankAccount(“Li, 2380.00), new BankAccount(“Wang, 500.00), new BankAccount(“Liu, 175.56), new BankAccount(“Ma, 924.02);動態(tài)初始化:使用運(yùn)算符new,需要經(jīng)過兩步:首先給數(shù)組分配空間type arrayName =new typearraySize;然后給每一個(gè)數(shù)組元素分配空間arrayNa
3、me0=new type(paramList);arrayNamearraySize-1=new type(paramList);7.1.1 用數(shù)組存儲對象(續(xù)) 對象數(shù)組的初始化對象數(shù)組第五張,PPT共一百零八頁,創(chuàng)作于2022年6月6使用數(shù)組存儲一個(gè)班的學(xué)生信息及考試成績。學(xué)生信息包括學(xué)號、姓名、三門課(英語、數(shù)學(xué)、計(jì)算機(jī))的成績及總成績。首先聲明學(xué)生類Student屬性包括學(xué)號(id),姓名(name),英語成績(eng),數(shù)學(xué)成績(math),計(jì)算機(jī)成績(comp),總成績(sum)方法包括構(gòu)造方法,get方法,set方法,toString方法,equals方法,compare方法(比
4、較兩個(gè)學(xué)生的總成績, 結(jié)果分大于,小于,等于),sum方法(計(jì)算總成績)實(shí)現(xiàn)Serializable接口,以便對象持久化,7.1.1 用數(shù)組存儲對象(續(xù)) 例7_1對象數(shù)組第六張,PPT共一百零八頁,創(chuàng)作于2022年6月7import java.io.*;public class Student implements Serializable private String id;/學(xué)號private String name;/姓名private int eng;/英語成績private int math; /數(shù)學(xué)成績private int comp; /計(jì)算機(jī)成績private int sum
5、;/總成績public Student(String id,String name,int eng,int math,int comp)this.id=id;=name;this.eng=eng;this.math=math;p=comp;sum(); /計(jì)算總成績7.1.1 用數(shù)組存儲對象(續(xù)) 例7_1對象數(shù)組第七張,PPT共一百零八頁,創(chuàng)作于2022年6月8public Student(Student s)this.id=s.id;=new String();this.eng=s.eng;this.math=s.math;p=p;sum(); /計(jì)算總成績 public void set
6、Id(String id)this.id=id;public void setName(String name)=name;7.1.1 用數(shù)組存儲對象(續(xù)) 例7_1對象數(shù)組第八張,PPT共一百零八頁,創(chuàng)作于2022年6月9public void setEng(int eng)this.eng=eng;sum(); /計(jì)算總成績public void setMath(int math)this.math=math;sum(); /計(jì)算總成績public void setComp(int comp)p=comp;sum(); /計(jì)算總成績 public String getId()return
7、id;7.1.1 用數(shù)組存儲對象(續(xù)) 例7_1對象數(shù)組第九張,PPT共一百零八頁,創(chuàng)作于2022年6月10public String getName()return name;public int getEng()return eng;public int getMath()return math;public int getComp()return comp; public int getSum()return sum;void sum()this.sum=eng+math+comp;7.1.1 用數(shù)組存儲對象(續(xù)) 例7_1對象數(shù)組第十張,PPT共一百零八頁,創(chuàng)作于2022年6月11pu
8、blic String toString()return getId() + t+getName() + t+getEng() + t+getMath() +t+getComp() + t+getSum();public boolean equals(Object x) if (this.getClass() != x.getClass() return false; Student b = (Student) x; return (this.getId().equals(b.getId(); /比較成績大小,當(dāng)前對象成績比參數(shù)對象成績大時(shí)返回1,相等時(shí)返回0,其它返回-1.public in
9、t compare(Student A)if(this.getSum()A.getSum() return 1;else if(this.getSum()=A.getSum() return 0;else return -1;7.1.1 用數(shù)組存儲對象(續(xù)) 例7_1對象數(shù)組第十一張,PPT共一百零八頁,創(chuàng)作于2022年6月12下面聲明班級類StudentClass:屬性包括班級名稱(name),容量(capacity),學(xué)生(students),實(shí)際人數(shù)(size)。方法包括構(gòu)造方法,get方法,set方法,toString方法。public class StudentClassprivat
10、e String name; /班級名稱static int capacity = 40; /最大容量private Student students; /學(xué)生private int size; /實(shí)際人數(shù)7.1.1 用數(shù)組存儲對象(續(xù)) 例7_1對象數(shù)組第十二張,PPT共一百零八頁,創(chuàng)作于2022年6月13public StudentClass(String name, int size) = name;this.size = size;students = new Studentcapacity; public String getName()return name; public int
11、 getCapacity()return capacity; public Student getStudents()return students;7.1.1 用數(shù)組存儲對象(續(xù)) 例7_1對象數(shù)組第十三張,PPT共一百零八頁,創(chuàng)作于2022年6月14public int getSize()return size; public void setName(String name) = name; public void setCapacity(int capacity)this.capacity = capacity; public void setSize(int size)this.si
12、ze = size;public void setStudents(Student students)for (int i = 0; isize; i+)this.studentsi = new Student(studentsi);7.1.1 用數(shù)組存儲對象(續(xù)) 例7_1對象數(shù)組第十四張,PPT共一百零八頁,創(chuàng)作于2022年6月15public String toString()String s;s = 班級: + name +t + 容量: + capacity + t + 實(shí)際人數(shù): + size +nn;s = s + “學(xué)號”+“t” + “姓名”+“t” + “英語”+“t” +
13、 “數(shù)學(xué)”+“t” + “計(jì)算機(jī)” +t + 總成績n;for (int i=0; isize; i+) s = s + studentsi.getId()+t+studentsi.getName()+t +studentsi.getEng()+t+studentsi.getMath()+t +studentsi.getComp()+t+studentsi.getSum()+n; return s;7.1.1 用數(shù)組存儲對象(續(xù)) 例7_1對象數(shù)組第十五張,PPT共一百零八頁,創(chuàng)作于2022年6月16下面聲明測試類Tester1(其中Keyboard類的聲明見第3章例3-12),為測試簡單,僅
14、生成具有5名學(xué)生的班級,5名學(xué)生的信息從鍵盤輸入,為了避免以后再重復(fù)輸入,可將輸入的學(xué)生信息保存到文件中import java.io.*;public class Tester1public static void main(String args)Student students;StudentClass aClass = new StudentClass(軟件0201,5); students=new Student5;for (int i=0; i5; i+) studentsi = new Student(getAStudent(i+1);aClass.setStudents(stud
15、ents);System.out.println(aClass);7.1.1 用數(shù)組存儲對象(續(xù)) 例7_1對象數(shù)組第十六張,PPT共一百零八頁,創(chuàng)作于2022年6月17/將學(xué)生信息保存到文件stu.ser中。try FileOutputStream fo = new FileOutputStream(stu.ser); ObjectOutputStream so = new ObjectOutputStream(fo); for (int i=0; i5; i+) so.writeObject(studentsi); so.close(); catch(Exception e) System
16、.out.println(e) ; 7.1.1 用數(shù)組存儲對象(續(xù)) 例7_1對象數(shù)組第十七張,PPT共一百零八頁,創(chuàng)作于2022年6月18public static Student getAStudent(int i)Student studenti; System.out.println(輸入第 + i + 個(gè)學(xué)生的信息:); System.out.print(學(xué)號:); String id = Keyboard.getString(); System.out.print(姓名:); String name = Keyboard.getString(); System.out.print(
17、英語成績:); int eng = Keyboard.getInteger(); System.out.print(數(shù)學(xué)成績:); int math = Keyboard.getInteger(); System.out.print(計(jì)算機(jī)成績:); int comp = Keyboard.getInteger(); studenti = new Student(id,name,eng,math,comp); return studenti; 7.1.1 用數(shù)組存儲對象(續(xù)) 例7_1對象數(shù)組第十八張,PPT共一百零八頁,創(chuàng)作于2022年6月19運(yùn)行結(jié)果如下(其中學(xué)生信息的輸入只顯示一部分):
18、輸入第1個(gè)學(xué)生的信息:學(xué)號:250201姓名:李紅英語成績:88數(shù)學(xué)成績:76計(jì)算機(jī)成績:60輸入第2個(gè)學(xué)生的信息: 班級:軟件0201 容量:40 實(shí)際人數(shù):5 學(xué)號 姓名 英語 數(shù)學(xué) 計(jì)算機(jī) 總成績250201 李紅 88 76 60 224250202 張林 78 67 80 225250203 董玉梅 86 80 75 241250204 張力 70 68 75 213250205 何為 80 90 78 2487.1.1 用數(shù)組存儲對象(續(xù)) 例7_1運(yùn)行結(jié)果對象數(shù)組第十九張,PPT共一百零八頁,創(chuàng)作于2022年6月20查找也稱為檢索,就是從一組數(shù)據(jù)中找出所需的具有某種特征的數(shù)據(jù)項(xiàng)順
19、序查找對所存儲的數(shù)據(jù)從第一項(xiàng)開始(也可以從最后一項(xiàng)開始),依次與所要查找的數(shù)據(jù)進(jìn)行比較,直到找到該數(shù)據(jù)或?qū)⑷吭囟颊彝赀€沒有找到該數(shù)據(jù)為止7.1.1 用數(shù)組存儲對象(續(xù)) 為班級類添加查找方法對象數(shù)組第二十張,PPT共一百零八頁,創(chuàng)作于2022年6月21已知學(xué)生的學(xué)號,查找此學(xué)生是否存在。如果存在,返回其在數(shù)組中的下標(biāo)位置;如果不存在,返回-1。順序查找方法的代碼如下public int find(String id) for (int i = 0; i =0) return false; this.studentssize = new Student( new String(aStuden
20、t.getId(), new String(aStudent.getName(), aStudent.getEng(), aStudent.getMath(), aStudent.getComp() ); size+; return true; 7.1.1 用數(shù)組存儲對象(續(xù)) 為班級類添加增加方法對象數(shù)組第二十二張,PPT共一百零八頁,創(chuàng)作于2022年6月23已知一個(gè)Student對象,將此對象從數(shù)組中刪除public boolean del(Student aStudent)int pos = find(aStudent.getId();if (pos= -1) return false;
21、 for (int i = pos+1; isize; i+) studentsi-1 = studentsi;size-;return true;7.1.1 用數(shù)組存儲對象(續(xù)) 為班級類編寫刪除方法對象數(shù)組第二十三張,PPT共一百零八頁,創(chuàng)作于2022年6月24已知學(xué)號,刪除一個(gè)學(xué)生public boolean del(String id)int pos = find(id);if (pos= -1) return false; for (int i = pos+1; isize; i+) studentsi-1 = studentsi;size-;return true;7.1.1 用數(shù)
22、組存儲對象(續(xù)) 為班級類添加刪除方法對象數(shù)組第二十四張,PPT共一百零八頁,創(chuàng)作于2022年6月257.1.2 對數(shù)組元素進(jìn)行排序排序按照預(yù)先規(guī)定的準(zhǔn)則(如升序或降序等),把數(shù)據(jù)有次序地排列起來已經(jīng)設(shè)計(jì)出許多排序算法,常用的排序算法有選擇排序插入排序交換排序以降序?yàn)槔M(jìn)行介紹對象數(shù)組第二十五張,PPT共一百零八頁,創(chuàng)作于2022年6月26選擇排序的基本思想先在未排序序列中選一個(gè)最小元素,作為已排序子序列然后再重復(fù)地從未排序子序列中選取一個(gè)最小元素,把它加到已經(jīng)排序的序列中,作為已排序子序列的最后一個(gè)元素直到把未排序子序列中的元素處理完為止7.1.2 對數(shù)組元素進(jìn)行排序(續(xù)) 選擇排序?qū)ο髷?shù)組
23、第二十六張,PPT共一百零八頁,創(chuàng)作于2022年6月27用選擇排序方法將例7-1中生成的文件stu.ser中的班級學(xué)生按總成績從高到低排序在例7-1中的StudentClass類中增加選擇排序方法selectionSort,代碼如下public void selectionSort()Student temp;for (int i=0; isize-1; i+) for (int j=i+1;j0) temp = studentsi; studentsi = studentsj; studentsj = temp; 7.1.2 對數(shù)組元素進(jìn)行排序(續(xù)) 例7_2對象數(shù)組第二十七張,PPT共一百
24、零八頁,創(chuàng)作于2022年6月28測試類代碼如下import java.io.*;public class SortTesterpublic static void main(String args)Student students=new Student5;/從文件stu.ser中讀出學(xué)生信息try FileInputStream fi = newFileInputStream(stu.ser); ObjectInputStream si = new ObjectInputStream(fi); for (int i=0; iai aj+1。第二步,將ai插入到aj之后。在插入之前,需要先保存
25、ai的值,之后將aj+1、an-1依次向后移一位(后移操作也可在第一步的查找過程中進(jìn)行)7.1.2 對數(shù)組元素進(jìn)行排序(續(xù)) 直接插入排序?qū)ο髷?shù)組第三十二張,PPT共一百零八頁,創(chuàng)作于2022年6月33在StudentClass中增加直接插入排序方法insertSort,代碼如下public void insertSort()Student temp;for (int i=1; i-1 & pare(studentsj)0)studentsj+1 = studentsj;j-; studentsj+1 = temp;7.1.2 對數(shù)組元素進(jìn)行排序(續(xù)) 例7_3對象數(shù)組第三十三張,PPT共一百
26、零八頁,創(chuàng)作于2022年6月347.1.3 在已排序的數(shù)組中查找一批Integer類型的數(shù)據(jù)已按升序排列好,a1a2an ,存儲在數(shù)組a0、a1、 、an-1中,現(xiàn)在要對該數(shù)組進(jìn)行查找,看給定的數(shù)據(jù)x是否在此數(shù)組中順序查找方法按從左向右的順序查找,當(dāng)x小于ai時(shí)就應(yīng)該停止查找public int seqSearch(int x) for (int i = 0; (i = Value(); i+) if (Value() = x) return i; return -1; 二分查找。在0到n-1中間選一個(gè)正整數(shù)k,用k把原來的有序序列分為三個(gè)有序子序列:a0,a1,ak-
27、1akak+1,ak+2,an-1 對象數(shù)組第三十四張,PPT共一百零八頁,創(chuàng)作于2022年6月35具有排序數(shù)組的類SortedIntArraysearch方法運(yùn)用二分查找算法:在給定的數(shù)組范圍內(nèi)查找某一元素,如果存在,返回元素所在的下標(biāo)位置,如果不存在,則返回元素應(yīng)該在的位置(如果要將此元素插入到數(shù)組中,且保持?jǐn)?shù)組仍然有序的位置)將此功能與插入功能相結(jié)合,可實(shí)現(xiàn)對數(shù)組元素進(jìn)行排序public class SortedIntArray private int capacity;private Integer rep;private int size;public SortedIntArray(
28、int n) capacity = n; rep = new Integercapacity; 7.1.3 在已排序的數(shù)組中查找(續(xù)) 例7_4對象數(shù)組第三十五張,PPT共一百零八頁,創(chuàng)作于2022年6月36public SortedIntArray( ) this(100); private int search(int i, int lower, int upper) int index = lower; if (upper = lower) int middle = (upper + lower) / 2; int current = Value( ); if
29、(current = i) index = middle; else if (current index; -j) repj = repj - 1; repindex = new Integer(i);+size;return this;public SortedIntArray remove(int i)int index = search(i);if (Value( ) = i) -size; for (int j = index; j size; +j) repj = repj + 1;return this;7.1.3 在已排序的數(shù)組中查找(續(xù)) 例7_4對象數(shù)
30、組第三十七張,PPT共一百零八頁,創(chuàng)作于2022年6月38public String toString( ) String toReturn = ; for (int i = 0; i size; +i) toReturn += repi.toString( ) + , ; return toReturn;static public void main(String args) SortedIntArray anArray = new SortedIntArray( ); anArray.insert(4).insert(9).insert(7).insert(1).insert(3). in
31、sert(2).insert(8).insert(7); System.out.println(anArray); anArray.remove(1).remove(8).remove(7).remove(3); System.out.println(anArray);7.1.3 在已排序的數(shù)組中查找(續(xù)) 例7_4對象數(shù)組第三十八張,PPT共一百零八頁,創(chuàng)作于2022年6月39運(yùn)行結(jié)果1, 2, 3, 4, 7, 7, 8, 9,2, 4, 7, 9,7.1.3 在已排序的數(shù)組中查找(續(xù)) 例7_4運(yùn)行結(jié)果對象數(shù)組第三十九張,PPT共一百零八頁,創(chuàng)作于2022年6月407.3 集合數(shù)組的優(yōu)點(diǎn)
32、是Java提供的隨機(jī)訪問對象序列的最有效方法是一個(gè)簡單的線性序列,訪問元素的速度較快數(shù)組的缺點(diǎn)大小自創(chuàng)建以后就固定了,在其整個(gè)生存期內(nèi)其大小不可改變數(shù)組元素只能是同一類型集合可動態(tài)改變其大小可在序列中存儲不同類型的數(shù)據(jù)第四十張,PPT共一百零八頁,創(chuàng)作于2022年6月41集合把具有相同性質(zhì)的一類東西,匯聚成一個(gè)整體在Java2中有很多與集合有關(guān)的接口及類它們被組織在以Collection及Map接口為根的層次結(jié)構(gòu)中,稱為集合框架在Java2之前,在Java 1.0/1.1中,沒有完整的集合框架。只有一些簡單的可以自擴(kuò)展的容器類Vector Hashtable7.3 集合(續(xù))集 合第四十一張,
33、PPT共一百零八頁,創(chuàng)作于2022年6月427.3.1 Java集合框架集合框架(Java Collections Framework)為表示和操作集合而規(guī)定的一種統(tǒng)一的標(biāo)準(zhǔn)的體系結(jié)構(gòu)提供了一些現(xiàn)成的數(shù)據(jù)結(jié)構(gòu)可供使用,程序員可以利用集合框架快速編寫代碼,并獲得優(yōu)良性能包含三大塊內(nèi)容對外的接口:表示集合的抽象數(shù)據(jù)類型,使集合的操作與表示分開接口的實(shí)現(xiàn):指實(shí)現(xiàn)集合接口的Java類,是可重用的數(shù)據(jù)結(jié)構(gòu)對集合運(yùn)算的算法:是指執(zhí)行運(yùn)算的方法,例如在集合上進(jìn)行查找和排序集 合第四十二張,PPT共一百零八頁,創(chuàng)作于2022年6月43集合框架接口聲明了對各種集合類型執(zhí)行的一般操作包括Collection、Se
34、t、List、SortedSet、Map、SortedMap基本結(jié)構(gòu)如圖7.3.1 Java集合框架(續(xù)) 對外的接口集 合第四十三張,PPT共一百零八頁,創(chuàng)作于2022年6月44類層次如圖,包括4個(gè)接口、4個(gè)抽象類及6個(gè)具體類7.3.1 Java集合框架(續(xù)) Collection接口CollectionAbstractCollectionVectorArrayListStackListSetSortedSetAbstractSetAbstractListAbstractSequentialListHashSetTreeSetLinkedList集 合第四十四張,PPT共一百零八頁,創(chuàng)作于2
35、022年6月45Collection接口聲明了一組操作成批對象的抽象方法:查詢方法、修改方法查詢方法int size() 返回集合對象中包含的元素個(gè)數(shù)boolean isEmpty() 判斷集合對象中是否還包含元素,如果沒有任何元素,則返回trueboolean contains(Object obj) 判斷對象是否在集合中boolean containsAll(Collection c) 判斷方法的接收者對象是否包含集合中的所有元素7.3.1 Java集合框架(續(xù)) Collection接口集 合第四十五張,PPT共一百零八頁,創(chuàng)作于2022年6月46修改方法包括boolean add(Ob
36、ject obj) 向集合中增加對象boolean addAll(Collection c) 將參數(shù)集合中的所有元素增加到接收者集合中boolean remove(Object obj) 從集合中刪除對象boolean removeAll(Collection c) -將參數(shù)集合中的所有元素從接收者集合中刪除boolean retainAll(Collection c) 在接收者集合中保留參數(shù)集合中的所有元素,其它元素都刪除void clear() 刪除集合中的所有元素7.3.1 Java集合框架(續(xù)) Collection接口集 合第四十六張,PPT共一百零八頁,創(chuàng)作于2022年6月47Se
37、t接口擴(kuò)展了Collection禁止重復(fù)的元素,是數(shù)學(xué)中“集合”的抽象對equals和hashCode操作有了更強(qiáng)的約定,如果兩個(gè)Set對象包含同樣的元素,二者便是相等的實(shí)現(xiàn)它的兩個(gè)主要類是哈希集合(HashSet)及樹集合(TreeSet)SortedSet接口一種特殊的Set其中的元素是升序排列的,還增加了與次序相關(guān)的操作通常用于存放詞匯表這樣的內(nèi)容7.3.1 Java集合框架(續(xù))Set、SortedSet接口集 合第四十七張,PPT共一百零八頁,創(chuàng)作于2022年6月48List接口擴(kuò)展了Collection可包含重復(fù)元素元素是有順序的,每個(gè)元素都有一個(gè)index值(從0開始)標(biāo)明元素在
38、列表中的位置實(shí)現(xiàn)它的四個(gè)主要類是VectorArrayList:一種類似數(shù)組的形式進(jìn)行存儲,因此它的隨機(jī)訪問速度極快LinkedList:內(nèi)部實(shí)現(xiàn)是鏈表,適合于在鏈表中間需要頻繁進(jìn)行插入和刪除操作棧Stack7.3.1 Java集合框架(續(xù))List接口集 合第四十八張,PPT共一百零八頁,創(chuàng)作于2022年6月49Map接口不是Collection接口的繼承用于維護(hù)鍵/值對(key/value pairs)描述了從不重復(fù)的鍵到值的映射,是一個(gè)從關(guān)鍵字到值的映射對象其中不能有重復(fù)的關(guān)鍵字,每個(gè)關(guān)鍵字最多能夠映射到一個(gè)值SortedMap接口一種特殊的Map,其中的關(guān)鍵字是升序排列的與Sorted
39、Set對等的Map,通常用于詞典和電話目錄等 7.3.1 Java集合框架(續(xù)) Map、SortedMap接口集 合第四十九張,PPT共一百零八頁,創(chuàng)作于2022年6月50接口的實(shí)現(xiàn)Collection沒有直接的實(shí)現(xiàn),只是作為其他集合接口的最小公分母除Collection 以外,其余五個(gè)接口都有實(shí)現(xiàn)主要的實(shí)現(xiàn)有SetHashSetSortedSetTreeSetListVector / ArrayList / LinkedListMapHashMapSortedMapTreeMap7.3.1 Java集合框架(續(xù)) 接口的實(shí)現(xiàn)集 合第五十張,PPT共一百零八頁,創(chuàng)作于2022年6月51對集合
40、運(yùn)算的算法大多數(shù)算法都是用于操作List對象有兩個(gè)(min和max)可用于任意集合對象排序算法sort對List重新排序,使其中的元素按照某種次序關(guān)系升序排列有兩種形式簡單形式只是將元素按照自然次序排列第二種形式需要一個(gè)附加的Comparator對象作為參數(shù),用于規(guī)定比較規(guī)則,可用于實(shí)現(xiàn)反序或特殊次序排序7.3.1 Java集合框架(續(xù)) 對集合運(yùn)算的算法集 合第五十一張,PPT共一百零八頁,創(chuàng)作于2022年6月52洗牌算法shuffle其作用與排序算法恰好相反,它打亂List中的任何次序。也就是說以隨機(jī)方式重排元素,任何次序出現(xiàn)的幾率都是相等的在實(shí)現(xiàn)偶然性游戲的時(shí)候,這個(gè)算法很有用,例如洗牌
41、常規(guī)數(shù)據(jù)處理算法reverse::將一個(gè)List中的元素反向排列 fill:用指定的值覆寫List中的每一個(gè)元素,這個(gè)操作在重新初始化List時(shí)有用copy::接受兩個(gè)參數(shù),目標(biāo)List和源List,將源中的元素復(fù)制到目標(biāo),覆寫其中的內(nèi)容。目標(biāo)List必須至少與源一樣長,如果更長,則多余的部分內(nèi)容不受影響7.3.1 Java集合框架(續(xù)) 對集合運(yùn)算的算法集 合第五十二張,PPT共一百零八頁,創(chuàng)作于2022年6月53查找算法binarySearch使用二分法在一個(gè)有序的List中查找指定元素有兩種形式第一種形式假定List是按照自然順序升序排列的第二種形式需要增加一個(gè)Comparator對象,
42、表示比較規(guī)則,并假定List是按照這種規(guī)則排序的。尋找最值用于任何集合對象min和max算法返回指定集合中的最小值和最大值這兩個(gè)算法分別都有兩種形式簡單形式按照元素的自然順序返回最值另一種形式需要附加一個(gè)Comparator對象作為參數(shù),并按照Comparator對象指定的比較規(guī)則返回最值7.3.1 Java集合框架(續(xù)) 對集合運(yùn)算的算法集 合第五十三張,PPT共一百零八頁,創(chuàng)作于2022年6月54Arrays類Java集合框架提供了一套專門用于操作數(shù)組的實(shí)用方法,它們作為靜態(tài)方法存在該類中還包括可以將數(shù)組視為列表(List)的靜態(tài)工廠常用方法fill (type a, type val):
43、給數(shù)組填充,就是簡單地把一個(gè)數(shù)組全部或者某段數(shù)據(jù)填成一個(gè)特殊的值equals (type a, type b):實(shí)現(xiàn)兩個(gè)數(shù)組的比較,相等時(shí)返回truesort (type a): 對數(shù)組排序binarySearch (): 對數(shù)組元素進(jìn)行二分法查找Arrays.asList (Object a): 實(shí)現(xiàn)數(shù)組到ArrayList的轉(zhuǎn)換7.3.1 Java集合框架(續(xù)) 數(shù)組實(shí)用方法集 合第五十四張,PPT共一百零八頁,創(chuàng)作于2022年6月55數(shù)組的填充和復(fù)制import java.util.*;public class CopyingArrays public static void main(
44、String args) int i = new int25; int j = new int25; Arrays.fill(i, 47); Arrays.fill(j, 99); System.arraycopy(i, 0, j, 0, i.length); int k = new int10; Arrays.fill(k, 103); System.arraycopy(i, 0, k, 0, k.length); Arrays.fill(k, 103); System.arraycopy(k, 0, i, 0, k.length); Integer u = new Integer10; I
45、nteger v = new Integer5; Arrays.fill(u, new Integer(47); Arrays.fill(v, new Integer(99); System.arraycopy(v, 0, u, u.length/2, v.length); JDK1.5,可使用Arrays.toString函數(shù)方便的顯示出數(shù)組的內(nèi)容7.3.1 Java集合框架(續(xù)) 數(shù)組實(shí)用方法集 合第五十五張,PPT共一百零八頁,創(chuàng)作于2022年6月56數(shù)組的比較import java.util.*;public class ComparingArrays public static vo
46、id main(String args) int a1 = new int10; int a2 = new int10; Arrays.fill(a1, 47); Arrays.fill(a2, 47); System.out.println(Arrays.equals(a1, a2); /true a23 = 11; System.out.println(Arrays.equals(a1, a2); /false String s1 = new String5; Arrays.fill(s1, Hi); String s2 = Hi, Hi, Hi, Hi, Hi; System.out.p
47、rintln(Arrays.equals(s1, s2);/true 7.3.1 Java集合框架(續(xù)) 數(shù)組實(shí)用方法集 合第五十六張,PPT共一百零八頁,創(chuàng)作于2022年6月577.3.2 向量(Vector,ArrayList)Vector/ArrayList實(shí)現(xiàn)了Collection接口的具體類能夠存儲任意對象,但通常情況下,這些不同類型的對象都具有相同的父類或接口不能存儲基本類型(primitive)的數(shù)據(jù),除非將這些數(shù)據(jù)包裹在包裹類中其容量能夠根據(jù)空間需要自動擴(kuò)充增加元素方法的效率較高,除非空間已滿,在這種情況下,在增加之前需要先擴(kuò)充容量Vector方法是同步的,線程安全ArrayL
48、ist方法是非同步的,效率較高集 合第五十七張,PPT共一百零八頁,創(chuàng)作于2022年6月58Vector類的構(gòu)造方法Vector myVector = new Vector(); /初始容量為10 Vector myVector = new Vector(int cap); Vector myVector = new Vector(Collection col);以參數(shù)col中的元素進(jìn)行初始化也可用數(shù)組元素生成,但需先將數(shù)組轉(zhuǎn)換成List對象,如String num = one, two, three, four, five; Vector aVector = new Vector(java.
49、util.Arrays.asList(num);ArrayList的構(gòu)造方法與Vector類似ArrayList myList = new ArrayList(); ArrayList myList = new ArrayList(int cap); ArrayList myList = new ArrayList(Collection col);7.3.2 向量(Vector,ArrayList)(續(xù)) 構(gòu)造方法集 合第五十八張,PPT共一百零八頁,創(chuàng)作于2022年6月59本節(jié)所有常用方法如無特殊說明,為Vector,ArrayList類共有之方法void add(Object obj) 添
50、加一個(gè)對象,如Vector teamList = new Vector(); teamList.add(Zhang Wei); teamList.add(Li Hong); boolean addAll(Collection col) 添加整個(gè)集合,如果接收者對象的結(jié)果有變化,則返回true,如Vector teamList = new Vector(); teamList.add(Zhang Wei); teamList.add(Li Hong); Vector yourList = new Vector(); yourList.addAll(teamList); 7.3.2 向量(Vect
51、or,ArrayList)(續(xù)) 常用方法1集 合第五十九張,PPT共一百零八頁,創(chuàng)作于2022年6月60int size() 返回元素的個(gè)數(shù)。boolean isEmpty() 如果不含元素,則返回trueObject get(int pos) 返回指定位置的元素,如Vector teamList = new Vector(); teamList.add(Zhang Wei); teamList.add(Li Hong); teamList.add(Yu Hongshu); teamList.get(1); / 返回 Li Hong teamList.get(3); / 產(chǎn)生例外 Array
52、IndexOutOfBoundsException集 合7.3.2 向量(Vector,ArrayList)(續(xù)) 常用方法2第六十張,PPT共一百零八頁,創(chuàng)作于2022年6月61void set(int pos, Object obj) 用參數(shù)對象替換指定位置的對象,如Vector teamList = new Vector(); teamList.add(Zhang Wei); teamList.add(Li Hong); teamList.add(Yu Hongshu); teamList.set(2, Liu Na); System.out.println(teamList); / 顯
53、示Zhang Wei, Li Hong, Liu NateamList.set(3,Ma Li); / 產(chǎn)生例外ArrayIndexOutOfBoundsException集 合7.3.2 向量(Vector,ArrayList)(續(xù)) 常用方法3第六十一張,PPT共一百零八頁,創(chuàng)作于2022年6月62boolean remove(Object obj) 去除給定對象的第一次出現(xiàn),如果找到了對象,則返回true。去除一個(gè)對象后,其后面的所有對象都依次向前移動。如Vector teamList = new Vector(); teamList.add(Zhang Wei); teamList.a
54、dd(Li Hong); teamList.add(Yu Hongshu); teamList.remove(Li Hong);teamList.remove(Wang Hong);/不做任何事,也不出現(xiàn)錯(cuò)誤System.out.println(teamList); / 顯示Zhang Wei,Yu Hongshu集 合7.3.2 向量(Vector,ArrayList)(續(xù)) 常用方法4第六十二張,PPT共一百零八頁,創(chuàng)作于2022年6月63Object remove(int pos) 去除給定位置的元素,并返回被去除的對象。如Vector teamList = new Vector();
55、teamList.add(Zhang Wei); teamList.add(Li Hong); teamList.add(Yu Hongshu);teamList.remove(0); /去除Zhang WeiteamList.remove(0); /去除 Li HongSystem.out.println(teamList); / 顯示Yu HongshuteamList.remove(1); /產(chǎn)生例外 ArrayIndexOutOfBoundsException集 合7.3.2 向量(Vector,ArrayList)(續(xù)) 常用方法5第六十三張,PPT共一百零八頁,創(chuàng)作于2022年6月
56、64boolean removeAll(Collection col) 從接收者對象中去除所有在參數(shù)對象中出現(xiàn)的元素,如果接收者對象的結(jié)果有變化,則返回true。如Vector teamList = new Vector(); teamList.add(Zhang Wei); teamList.add(Li Hong); teamList.add(Yu Hongshu);Vector yourList = new Vector(); yourList.add(Yu Hongshu); yourList.add(He Li); yourList.add(Zhang Wei); teamList.
57、removeAll(yourList); System.out.println(teamList); / 顯示Li Hong集 合7.3.2 向量(Vector,ArrayList)(續(xù)) 常用方法6第六十四張,PPT共一百零八頁,創(chuàng)作于2022年6月65void clear() 去除所有的元素boolean contains(Object obj) 返回是否包含指定的對象,如果包含則返回true;否則,返回falseboolean containsAll(Collection col) 返回是否包含參數(shù)col中的所有對象int indexOf(Object obj) 返回給定對象在Vecto
58、r /ArrayList中第一次出現(xiàn)的位置,如不存在,則返回-1。如Vector teamList = new Vector(); teamList.add(Zhang Wei); teamList.add(Li Hong); teamList.indexOf(Li Hong); / 返回1。teamList.indexOf(Zhang Li); / 返回-1。集 合7.3.2 向量(Vector,ArrayList)(續(xù)) 常用方法7第六十五張,PPT共一百零八頁,創(chuàng)作于2022年6月66Enumeration elements() 返回包含Vector中所有元素的Enumeration類對
59、象。該方法只能應(yīng)用于Vector對象,不能應(yīng)用于ArrayList對象。如Vector teamList = new Vector(); teamList.add(Zhang Wei); teamList.add(Li Hong); teamList.add(Yu Hongshu);teamList.elements(); / 返回Enumeration類對象。Iterator iterator() 返回包含Vector/ArrayList中所有元素的Iterator類對象集 合7.3.2 向量(Vector,ArrayList)(續(xù)) 常用方法8第六十六張,PPT共一百零八頁,創(chuàng)作于2022
60、年6月67當(dāng)使用get()方法取出Vector中的元素時(shí),返回的類型都是Object類型。Vector的使用者需要記住存入對象的具體類型,當(dāng)使用get()方法取出后,再塑型成其本來的類型。例如,創(chuàng)建Customer類對象的Vector如下:String names = Zhang, Li, Wang, Zhao; Vector v = new Vector(); for (int i=0; inames.length; i+) Customer c = new Customer(); c.setName(namesi); v.add(c); 使用get()方法將Customer對象從Vecto
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度網(wǎng)絡(luò)安全風(fēng)險(xiǎn)評估與解決方案合同范本3篇
- 二零二五版股權(quán)激勵(lì)合同:某上市公司對高級管理人員股權(quán)激勵(lì)計(jì)劃3篇
- 2025年度時(shí)尚服飾店開業(yè)活動承包合同3篇
- 2025年度高端不銹鋼醫(yī)療器械制造委托合同3篇
- 二零二五版智能穿戴設(shè)備代加工合同范本2篇
- 二零二五年度環(huán)保型車間生產(chǎn)承包服務(wù)合同范本3篇
- 二零二五年高管子女教育援助與扶持合同3篇
- 2025年草場租賃與牧區(qū)基礎(chǔ)設(shè)施建設(shè)合同3篇
- 二零二五版涵洞工程勞務(wù)分包單價(jià)及工期延誤賠償合同3篇
- 二零二五版財(cái)務(wù)報(bào)表編制會計(jì)勞動合同范本3篇
- GB/T 34241-2017卷式聚酰胺復(fù)合反滲透膜元件
- GB/T 12494-1990食品機(jī)械專用白油
- 運(yùn)輸供應(yīng)商年度評價(jià)表
- 成熙高級英語聽力腳本
- 北京語言大學(xué)保衛(wèi)處管理崗位工作人員招考聘用【共500題附答案解析】模擬試卷
- 肺癌的診治指南課件
- 人教版七年級下冊數(shù)學(xué)全冊完整版課件
- 商場裝修改造施工組織設(shè)計(jì)
- 統(tǒng)編版一年級語文上冊 第5單元教材解讀 PPT
- 加減乘除混合運(yùn)算600題直接打印
- ASCO7000系列GROUP5控制盤使用手冊
評論
0/150
提交評論