包,内部类,常用类,集合
包--package
分包
實際開發(fā)中,用的都是多級包(不同的包下放不同的代碼)
? ? ? ? ? ? ? ? 公司域名反寫(中間加"."隔開)
? ? ? ? 包名:
? ? ? ? ? ? ? ? service------業(yè)務(wù)層代碼:邏輯判斷
? ? ? ? ? ? ? ? dao(data access object)-----數(shù)據(jù)訪問層代碼
????????????????pojo/entity/domain------一些實體類(放事物的一些屬性)
? ? ? ? ? ? ? ? test------測試類(main方法所在)
? ? ? ? ? ? ? ? control/web------前后端交互
權(quán)限修飾符的范圍?
?形式參數(shù):類,具體類或者抽象類 接 口以及返回值問題--->具體類/抽象 類/接口類型
形式參數(shù):
情況1:方法的形式參數(shù)是一個具體類,調(diào)用該方法實際參數(shù)如何傳遞
需要傳遞一個具體的類對象
?代碼體現(xiàn)
class Student{ public void study(){ System.out.println("學(xué)習(xí)JavaEE之JavaSE基礎(chǔ)"); } } class StudentDemo{ public void method(Student student){//形式參數(shù)一個引用類型:具體類,調(diào)用該 方法,實際參數(shù)需要一個學(xué)生對象 student.study() ; } } //測試類中測試 //調(diào)用StudentDemo類的method方法 //創(chuàng)建StudentDemo類對象 StudentDemo sd = new StudentDemo() ; //調(diào)用該方法,實際參數(shù)需要一個學(xué)生對象 Student s = new Student() ; sd.method(s); //實際參數(shù)s?情況2:方法的形式參數(shù)是一個抽象類,調(diào)用該方法實際參數(shù)如何傳遞
傳遞一個抽象類的具體的子類對象
代碼體現(xiàn)?
abstract class Person{//人類 public abstract void work(); //工作 } class PersonDemo{ //成員方法 public void show(Person p){//形式參數(shù)是一個抽象類,抽象類不能實例化,需要 new 它的子類對象 抽象類多態(tài) p.work() ; } } //必須提供子類 //只能現(xiàn)在提供抽象類的具體的子類 class Worker extends Person{ @Override public void work() { System.out.println("愛生活,愛工作,愛高圓圓"); } } //測試類中測試 PersonDemo pd = new PersonDemo() ; //創(chuàng)建Person對象 //Person p = new Person(); 抽象類不能實例化 // pd.show(p); //抽象類多態(tài) Person p = new Worker() ; pd.show(p); System.out.println("-----------------------------------------"); //匿名對象 pd.show(new Worker());情況3:?方法的形式參數(shù)是一個接口,調(diào)用該方法實際參數(shù)如何傳遞
實際參數(shù)傳遞的是該接口的子實現(xiàn)類對象?
代碼體現(xiàn)
interface Love{ void love() ; } class LoveDemo{ public void function(Love lo){ //方法形式參數(shù)是一個接口類型,接口new不了 lo.love(); } } //需要提供具體的子實現(xiàn)類 class LoveImpl implements Love{ @Override public void love() { System.out.println("love loveImpl..."); } } //測試類中測試 //調(diào)用LoveDemo類的中的function方法 //創(chuàng)建LoveDemo類對象 LoveDemo ld = new LoveDemo() ; //創(chuàng)建Love對象 //Love love = new Love() ;//接口不能實例化,肯定需要接口的子實現(xiàn)類 //ld.function(love); //接口多態(tài)的方式:接口名 對象名 = new 具體的子實現(xiàn)類名() ; Love love = new LoveImpl() ; ld.function(love); //方式2: ld.function(new LoveImpl()) ;返回值問題?
情況1 方法返回值類型是一個具體類,如何返回
需要返回當(dāng)前類的具體類對象
代碼體現(xiàn)?
//學(xué)生類 class Student{ public void study(){ System.out.println("正在學(xué)習(xí)JavaEE"); } } //StudentDemo class StudentDemo{ public Student method(){//這個的返回值是一個引用類型,具體類---方法結(jié)束, 必須返回一個當(dāng)前類的具體類對象 // 如何結(jié)束??? //return Student; //方式1 : /*Student s = new Student() ; return s;*/ //方式2:匿名對象的格式 return new Student() ; } } //測試類 //調(diào)用StudentDemo這個類里面的method方法 StudentDemo sd = new StudentDemo() ; Student s = sd.method(); // 這個方法的本質(zhì): new Student(); s.study() ;情況2:?方法返回值類型是一個抽象類, 如何返回
返回的是該抽象類的子類對象
代碼體現(xiàn)
//抽象類 abstract class Person{ public abstract void work(); } class PersonDemo { public Person show(){ //方法的返回值是一個抽象類,必須要提供抽象類子類 //?? /* Person p = new Person() ;//抽象類不能new return p ;*/ //return new Person() ; //需要抽象類的子類對象:抽象類多態(tài) //方式1:抽象類多態(tài) /* Person p = new Programmer() ; return p;*/ //方式2:匿名對象 return new Programmer() ; } } //需要有抽象類的子類,才能使用抽象類多態(tài) class Programmer extends Person{ //程序員類是具體的子類 @Override public void work() { System.out.println("不斷的去完成項目開發(fā)..."); } } //測試類中測試 //調(diào)用PersonDemo的show方法 PersonDemo pd = new PersonDemo() ; Person person = pd.show(); //show方法本質(zhì) new Programmer() ; person.work();?情況3:方法返回值類型是一個接口,如何返回
返回的是該接口的子實現(xiàn)類對象
代碼體現(xiàn)
//定義一個接口 interface Mary{ void mary() ; } //定義一個類 class MaryDemo{ public Mary method(){ //方法的返回值是接口類型,接口實例化不了的! //?? //Mary mary = new Mary() ; // return mary ; //return new Mary() ; //方式1:接口多態(tài) // Mary mary = new WeddingCompany() ; //return mary ; //方式2:匿名對象 return new WeddingCompany() ; } } //需要接口的子實現(xiàn)類 //婚慶公司 class WeddingCompany implements Mary{ @Override public void mary() { System.out.println("婚慶公司布置婚禮現(xiàn)場!"); } } //測試類中測試 MaryDemo maryDemo = new MaryDemo() ; Mary m = maryDemo.method();//method方法本質(zhì):創(chuàng)建子實現(xiàn)類對象 new WeddingCompany() ; m.mary();類及其組成可以用的修飾符?
內(nèi)部類
定義:在類中創(chuàng)建的類
位置
按照內(nèi)部類在類中定義的位置不同,可以分為如下兩種格式:
???????????????? 成員位置(成員內(nèi)部類):即類中方法外
?????????????????局部位置(局部內(nèi)部類):即方法定義上或方法中
成員內(nèi)部類 外界如何創(chuàng)建對象
???????????????? 外部類名.內(nèi)部類名 對象名 = 外部類對象.內(nèi)部類對象;?
成員內(nèi)部類?
成員內(nèi)部的常見修飾符
???????? private 為了保證數(shù)據(jù)的安全性
????????static 為了讓數(shù)據(jù)訪問更方便
????????被靜態(tài)修飾的成員內(nèi)部類只能訪問外部類的靜態(tài)成員
????????內(nèi)部類被靜態(tài)修飾后的方法 可以是靜態(tài)方法,也可以是非靜態(tài)方
面試題?
補齊程序(注意:內(nèi)部類和外部類沒有繼承關(guān)系) class Outer {public int num = 10;class Inner {public int num = 20;public void show() {int num = 30;//補全代碼}} } 在控制分別輸出:30,20,10 //答案: System.out.println(num); System.out.println(this.num); System.out.println(Outer.this.num);局部內(nèi)部類?
可以直接訪問外部類的成員
可以創(chuàng)建內(nèi)部類對象,通過對象調(diào)用內(nèi)部類方法,來使用局部內(nèi)部類功能
注意事項?
局部變量會隨著方法的調(diào)用完畢而消失,這個時候,局部對象并沒有立馬從堆內(nèi)存中消失,還 要使用那個變量。為了讓數(shù)據(jù)還能繼續(xù)被使用,就用fianl修飾,這樣,在堆內(nèi)存里面存儲的其實 是一個常量值。
代碼體現(xiàn)?
class Outer {public void method() {final int n = 100;class Inner {public void show() {System.out.println(n);}}Inner i = new Inner();i.show();} } class OuterDemo {public static void main(String[] args) {Outer o = new Outer();o.method();} }匿名內(nèi)部類?
內(nèi)部類的簡化寫法
前提?
存在一個類或者接口
????????這里的類可以是具體類也可以是抽象類。
格式?
new 類名或者接口名() {重寫方法;}
本質(zhì)?
是一個繼承了類或者實現(xiàn)了接口的子類匿名對象
代碼體現(xiàn)?
abstract class Person {public abstract void show(); } class PersonDemo {public void method(Person p) {s.show();} }class PersonTest {public static void main(String[] args) {//如何調(diào)用PersonDemo中的method方法呢?PersonDemo pd = new PersonDemo ();pd.method(new Person() {public void show() {System.out.println(“show”);}});} }面試題?
interface Inter { void show(); } class Outer { //補齊代碼 } class OuterDemo {public static void main(String[] args) {Outer.method().show(); } } 要求在控制臺輸出”HelloWorld//答案 public static Inter method(){return new Inter() {@Overridepublic void show() {System.out.println("helloworld");}};}常用類?
Object類
Object類是所有類的根類,所有類的超類也就是父類
重點功能?
public String toString()
????????????????// 返回對象的字符串表示形式。 一般來說, toString方法返回一個“textually代表”這個對象的字符串。 結(jié)果應(yīng)該是一個簡 明扼要的表達,容易讓人閱讀。 建議所有子類覆蓋此方法
public int hashCode()? ? ? //返回對象的哈希碼值?
?public boolean equals(Object obj)? ? ?//指示一些其他對象是否等于此
protected Object clone() throws CloneNotSupportedException? ? ?//創(chuàng)建并返回此對象的副本
String類?
特點
字符串的值在創(chuàng)建后不能被更改
因為String對象是不可變的,所以它們可以被共享。
?常用功能
?
面試題?
*String s1 = "hello" ; * String s2 = new String("hello") ; * 他們分別創(chuàng)建了幾個對象,有什么區(qū)別呢? * s1: 現(xiàn)在常量池中,是否存在這個常量,如果存在,直接返回地址值;否則,開辟新的空間地址值,賦值s1 * s2:在堆內(nèi)存中申請空間,然后常量"hello", * 還需要在常量池中找是否存在這個常量,有,就返回地址,重新開辟常量池空間 * * * 共同點:都表示創(chuàng)建"hello"字符串實?StringBuffer類
線程安全的可變字符序列
常用功能
int?length():?獲取字符串緩沖區(qū)的長度
public?int?capacity():獲取字符串緩沖區(qū)的容量?默認容量?16個字符,超過這個容量,會自己分配,使用的新的字符串的長度+16
StringBuffer常用的功能
public?StringBuffer?append(任意類型數(shù)據(jù)):添加任何類型數(shù)據(jù)到字符串緩沖區(qū)中
返回值字符串緩沖區(qū)本身
public?StringBuffer?insert(int?offset,String?xx):插入:在指定位置的前面插入一個新的字符序列
public?StringBuffer?reverse():將字符串緩沖區(qū)字符序列反轉(zhuǎn)
面試題?StringBuffer和String 的區(qū)別
String的特點:字符串常量,一旦創(chuàng)建,其值不改變; 不支持可變的字符序列
StringBuffer:支持的可變的字符序列,而且線程安全的,---執(zhí)行效率低,多線程環(huán)境會 用,單線程環(huán)境下用的StringBuilder這個類;
方法的形式參數(shù):
????????String和基本類型效果一樣;形式參數(shù)的改變不影響實際參數(shù)
????????StringBuffer:作為方法的形式參數(shù),形式參數(shù)的改變,直接影響實際參數(shù)
類型轉(zhuǎn)換?
/** * 類型轉(zhuǎn)換 * StringBuffer和String的類型轉(zhuǎn)換 * * String---->StringBuffer,目的為了StringBuffer的特有功能 * StringBuffer--->String,結(jié)果需要是String類型 */ public class StringBufferDemo3 { public static void main(String[] args) { //String----StringBuffer //有一個字符串 String s = "hello" ; //StringBuffer sb = s; //方式1:利用StringBuffer()無參構(gòu)造方法+append(String str) //創(chuàng)建一個字符串緩沖區(qū)對象 StringBuffer sb = new StringBuffer() ; sb.append(s) ; System.out.println(sb); //字符串緩沖區(qū)存儲的數(shù)據(jù)內(nèi)容 "hello",類型是 StringBuffer System.out.println("----------------------------------"); //方式2:利用StringBuffered的有參構(gòu)造方法StringBuffer(String str) StringBuffer sb2 = new StringBuffer(s) ; System.out.println(sb2); System.out.println("-----------------------StringBuffer轉(zhuǎn)換成String-- ---------------------"); //StringBuffer --->String StringBuffer buffer = new StringBuffer("helloworld") ;//字符序列是 helloworld,外面的類型StringBuffer //方式1:public String(StringBuffer buffer) ;String類的構(gòu)造方法 String str = new String(buffer) ; System.out.println(str) ; //內(nèi)容"helloworld",類型String System.out.println("-------------------------------------"); //方式2:public String toString() 顯示的應(yīng)該是字符串緩沖區(qū)中的實際的 字符序列內(nèi)容 String str2 = buffer.toString(); System.out.println(str2); /*int i = 100 ; String s4 = "100" ;*/ } }Integer類
自動拆裝箱
/** * Integer類的構(gòu)造方法 * public Integer(int value):將int類型----Integer類型 * public Integer(String s) throws NumberFormatException :將數(shù)字字符串 轉(zhuǎn)換成Integer * throws:拋出異常的意思 * 拋出異常的可能性,當(dāng)你傳入的字符串如果不是數(shù)字字 符串,jvm解析的時候,將這個異常就信息打印在控制臺上 * * */ public class IntegerDemo2 { public static void main(String[] args) { int i = 100 ;//基本類型 // public Integer(int value):將int類型----Integer類型 Integer ii = new Integer(i) ; System.out.println(ii) ;//100 ii += 200 ; System.out.println(ii); //public Integer(String s) throws NumberFormatException :將數(shù)字字符 串 轉(zhuǎn)換成Integer //String s = "hello" ;//字符串: 必須是數(shù)字字符串 Integer是int類型包 裝類型 /* String s = "20" ; Integer iii = new Integer(s) ; System.out.println(iii);*///20 } /** * 上面代碼的使用反編譯工具查看 * jdk5新特性:自動拆裝箱 :基本類型--- 變成對應(yīng)的引用類型 "裝箱" * 這些引用類型----->基本類型 ""拆箱 * * int i = 100; * Integer ii = new Integer(i); //裝箱 int---->Integer * System.out.println(ii); * * //我們的寫的代碼 ii+=200 ; * //反編譯工具---將 ii+=200:優(yōu)化下面格式 * * ii = Integer.valueOf(ii.intValue() + 200); //參數(shù)里面: ii.intValue()+ 200 : ii--->拆箱 int類型 +200 求和 * //參數(shù)里面完成計算---->int結(jié)果 * public static Integer valueOf(int i) :將int類型的結(jié)果---- >Integer "裝箱" * * * System.out.println(ii); * */ }Integer內(nèi)部緩存區(qū)?
/* 將一個常量值賦值給Integer類型,通過反編譯工具 調(diào)用的Integer.valueOf(int類 型的值) */ public class IntegerTest { public static void main(String[] args) { Integer i1 = 127 ; Integer i2 = 127 ; System.out.println(i1==i2) ;//true System.out.println(i1.equals(i2)) ;//true Integer i3 = 127 ; Integer i4 = new Integer(127) ; System.out.println(i3==i4) ; //false System.out.println(i3.equals(i4)) ;//true //值128 超過-128-127 Integer i5 = 128 ; //Integer i5 = new Integer(128); Integer i6 = 128 ; //Integer i6 = new Integer(128); System.out.println(i5==i6) ; //false System.out.println(i5.equals(i6)) ;//true Integer i7 = new Integer(128) ; Integer i8 = new Integer(128) ; System.out.println(i7==i8) ;//false System.out.println(i7.equals(i8)) ;//true } }常用功能
構(gòu)造方法:
????????public Integer(int value)
? ? ? ? public Integer(String s)
成員方法
????????//int類型和String類型的相互轉(zhuǎn)換
???????? //int – String
????????//String – int
????????public int intValue()
????????public static int parseInt(String s)
????????public static String toString(int i)
????????public static Integer valueOf(int i)
????????public static Integer valueOf(String s)
????????//常用的基本進制轉(zhuǎn)換
????????public static String toBinaryString(int i)
????????public static String toOctalString(int i)
????????public static String toHexString(int i
character類?
常用功能
構(gòu)造方法
????????public Character(char value)
成員方法
????????public static boolean isUpperCase(char ch)
????????public static boolean isLowerCase(char ch)
????????public static boolean isDigit(char ch)
????????public static char toUpperCase(char ch)
????????public static char toLowerCase(char ch)
int和String的相互轉(zhuǎn)換?
/*基本數(shù)據(jù)類型:八種 如何轉(zhuǎn)換String * String---->基本類型 * 使用 int舉例 * * int---->String :Integer.valueOf(int類型的值) * String---->int :Integer.parseInt(數(shù)字字符串) */ public class IntegerDemo3 { public static void main(String[] args) { //int---->String int i = 10 ; //方式1:字符串拼接 符號+ System.out.println(i+"");//"10" //方式2:int---->Integer:裝箱---->String //Intege(int i) Integer ii = new Integer(i) ; //Integer---->String :public String toString() String s = ii.toString(); System.out.println(s) ; //"10" //方式3:Integer類的靜態(tài)方法:public static String toString(int i) (推 薦) String s2 = Integer.toString(i); System.out.println(s2); System.out.println("-----------------------------------------------") ; //String --->int String str = "100" ;// 數(shù)字字符串 //方式1:推薦 Integer 靜態(tài)方法 public static int parseInt(String str): "最常用的" int number = Integer.parseInt(str); System.out.println(number); //100 //方式2:String---->Integer--->int //Integer(String s) Integer integ = new Integer(str) ; //public int intValue() int number2 = integ.intValue(); System.out.println(number2) ; } }Random類
常用功能
構(gòu)造方法
????????public Random()
????????public Random(long seed)
成員方法
????????public int nextInt()
? ? ? ? public int nextInt(int n)
System類?
常用功能
public static void gc()
public static void exit(int status)
public static long currentTimeMillis()
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
Date,DateFormat類?
DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關(guān)的方式格式化并解析日期或時間。 是抽象類,所以使用其子類SimpleDateFormat?
date類?
????????public Date()
????????public Date(long date)
????????public long getTime()
????????public void setTime(long time)
SimpleDateFormat
????????構(gòu)造方法
? ? ? ??????????public SimpleDateFormat()
????????????????public SimpleDateFormat(String pattern)
? ? ? ? 成員方法
????????????????? ? ??
Date和String的類型轉(zhuǎn)換?
/** * Date重點:日期文本格式和Date如何轉(zhuǎn)換? * String日期文本格式 "2022-8-13"------>java.util.Date 日期格式 * Date日期格式 轉(zhuǎn)換成 String * * 使用中間橋梁:DateFormat類 是一個抽象類,不能實例化,jdk提供更具體的子 類:SimpleDateFormat * * 構(gòu)造方法 * public SimpleDateFormat(String pattern) * yyyy:年 MM:月 dd:月中日期 HH:小時 mm:分鐘 ss:秒 * * 成員方法: * Date---->String public String foramt(Date date) :格式化 * * String--->Date: public Date parse(String dateStr) throws ParseException: 解析 * 這個本身可能出現(xiàn)異常,如果解析的字符串的 格式和 pattern參數(shù)的模式匹配,就出錯了,解析失敗! * public SimpleDateFormat(String pattern) * * String s = "2008-5-12" ; * SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日") ; * SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ") ; * */ public class DateDemo2 { public static void main(String[] args) throws ParseException { //Date---->String :格式化操作 Date date = new Date() ; //創(chuàng)建當(dāng)前系統(tǒng)時間日期對象 System.out.println(date); //使用中間橋梁 public SimpleDateFormat(String pattern) SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ; // public String foramt(Date date) :格式化 String s = sdf.format(date); System.out.println(s); System.out.println("-------------------------------------") ; //String--->Date: public Date parse(String dateStr) throws ParseException: 解析 String dataStr = "2008-5-12" ; //創(chuàng)建中間橋梁 public SimpleDateFormat(String pattern) SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd") ; //解析 Date d = sdf2.parse(dataStr); System.out.println(d); } }集合?
數(shù)組和集合的區(qū)別??
1.長度的區(qū)別 數(shù)組長度固定 集合長度可變 2.存儲數(shù)據(jù)類型的區(qū)別 數(shù)組:存儲的數(shù)據(jù)類型:可以是基本數(shù)據(jù)類型,也可以是引用類型 集合:存儲的數(shù)據(jù)類型:只能使用引用類型 3.存儲元素的區(qū)別 數(shù)組:這個容器只能存儲同一種類型的元素 集合:這個容器可以存儲不同的引用類型的元素 ```' ## Collection:集合的頂層次的根接口Collection集合
常用功能?
boolean add(E e) 添加元素
boolean remove(Object o) 刪除元素
boolean contains(Object o)判斷是否包含指定的元素
Object[] toArray():將集合轉(zhuǎn)換成對象數(shù)組
Iterator iterator():Collection集合的迭代器
Iterator iterator():判斷集合是否為空
三種遍歷方式代碼體現(xiàn)
import java.util.*;public class CollectionTest {public static void main(String[] args) {Collection<Student> c=new ArrayList<>();Student s1=new Student("徐鳳年",29);Student s2=new Student("姜泥",26);Student s3=new Student("徐龍象",23);Student s4=new Student("李淳罡",44);c.add(s1);c.add(s2);c.add(s3);c.add(s4);//方式一;轉(zhuǎn)化為數(shù)組對象進行遍歷Object[] obj=c.toArray();for(int i=0;i< obj.length;i++){System.out.println(obj[i]);}System.out.println("--------------------------------------");//方式二:運用collection迭代器Iterator<Student> it=c.iterator();while(it.hasNext()){System.out.println(it.next());}System.out.println("--------------------------------------");//方式三:增強for循環(huán)for(Student s:c){System.out.println(s);}} } //學(xué)生類 import java.util.Objects;public class Student {private String name;private int age;public Student() {}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 Objects.hash(name, age);}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && name.equals(student.name);}}List集合?(繼承collection接口)
ArrayList:
????????底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢,
????????線程角度考慮:線程不安全,不同步,執(zhí)行效率高!
????????注意: 有擴容機制,是之前集合的1.5倍
Vcctor:
????????底層數(shù)據(jù)結(jié)構(gòu)數(shù)組,查詢快,增刪慢,
????????線程角度考慮:線程安全的類,同步,執(zhí)行效率低;
LinkedList:
????????底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢慢,增刪快
????????線程角度考慮:線程不安全的類,不同步,執(zhí)行效率高?
List接口成員方法
void add(int index,E element) 在指定位置處添加元素
E remove(int index) 刪除指定位置的元素
E get(int index) 獲取指定位置的元素
E set(int index,E element) 在指定位置設(shè)置指定的元素
ListIterator listIterator() 列表迭代器
ArrayList子實現(xiàn)類?(collection和list的子實現(xiàn)類)
底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢;線程不安全,效率高
代碼體現(xiàn)?
import java.util.ArrayList; import java.util.List; import java.util.ListIterator;public class ListTest {public static void main(String[] args) {//方式三運用list特有的方法進行遍歷List<Student> list=new ArrayList<>();Student s1=new Student("徐鳳年",29);Student s2=new Student("姜泥",26);Student s3=new Student("徐龍象",23);Student s4=new Student("李淳罡",44);list.add(s1);list.add(s2);list.add(s3);list.add(s4);//方式一運用list特有的方法進行遍歷for(int i=0;i< list.size();i++){Student s= list.get(i);System.out.println(s);}System.out.println("--------------------------------------");//方式二:利用list集合特有迭代器遍歷ListIterator<Student> lit= list.listIterator();while(lit.hasNext()){Student s=lit.next();System.out.println(s.getName()+"---"+s.getAge());}System.out.println("--------------------------------------");//方式三:增強for循環(huán)for(Student s:list){System.out.println(s);}} } //學(xué)生類 package com.qf.test3;import java.util.Objects;public class Student {private String name;private int age;public Student() {}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 Objects.hash(name, age);}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && name.equals(student.name);}}Vector集合子實現(xiàn)類??(collection和list的子實現(xiàn)類)
底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢;線程安全,效率低?
特有功能?
public void addElement(E obj) 添加元素,類似于List的add方法
public E elementAt(int index) 獲取指定位置的元素 ,類似于List集合的get方法
public Enumeration elements() 遍歷所有的元素,類似于List的迭代器
特有的遍歷方式?
Vector特有的遍歷方式
????????Enurmation elements()
????????boolean hasMoreElements()
????????nextElement()
普通for
????????size()+elementAt(int index)
?LinkedList子實現(xiàn)類(collection和list的子實現(xiàn)類)
底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢慢,增刪快;線程不安全,效率高?
LinkedList集合特有功能?
public void addFirst(E e) 添加鏈表開頭
???????? ????????addLast(E e) 添加鏈表結(jié)尾
public E getFirst() 獲取鏈表第一個
?????????????getLast() 獲取鏈表最后一個
public E removeFirst() 刪除第一個
public E removeLast() 刪除最后一個
?
List集合去重?
//String去重 import java.util.ArrayList; import java.util.List;public class ListStringquchong {public static void main(String[] args) {List<String> list=new ArrayList<>();list.add("abc");list.add("gsf");list.add("gsf");list.add("abc");list.add("ccc");list.add("ccc");list.add("ab");list.add("ab");List<String> ls1=new ArrayList<>();for(int i=0;i< list.size();i++){String s=list.get(i);if(ls1.contains(s)==false){ls1.add(s);}}for(String s:ls1){System.out.println(s);}} } //自定義去重 import java.util.ArrayList; import java.util.List;public class Tistzidingyiquchong {public static void main(String[] args) {List<Student> ls=new ArrayList<>();Student s1=new Student("喬峰",44);Student s2=new Student("楊過",43);Student s3=new Student("楊過",43);Student s4=new Student("喬峰",44);Student s5=new Student("喬峰",44);Student s6=new Student("滅絕師太",44);ls.add(s1);ls.add(s2);ls.add(s3);ls.add(s4);ls.add(s5);ls.add(s6);List<Student> ls1=new ArrayList<>();for(int i=0;i<ls.size();i++){Student s=ls.get(i);if(ls1.contains(s)==false){ls1.add(s);}}for(Student s:ls1){System.out.println(s);}}}增強for?
簡化數(shù)組和Collection集合的遍歷
格式: for(元素數(shù)據(jù)類型 變量 : 數(shù)組或者Collection集合) {使用變量即可,該變量就是元素 }總結(jié)
以上是生活随笔為你收集整理的包,内部类,常用类,集合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux debian教程,Debia
- 下一篇: 论文阅读笔记:A Scalable Ex