20165318 2017-2018-2 《Java程序設計》第六周學習總結
20165318 2017-2018-2 《Java程序設計》第六周學習總結
教材內容學習總結
第八章 常用實用類
1、String類
- String類用來處理字符序列,在java.lang包中,程序可以直接使用String類。需要註意的是Java把String類聲明為final類,因此用戶不能擴展String類,即String類不可以有子類。
常量對象:字符串常量對象是用雙引號括起的字符序列,例如:"你好"、"12.97"、"boy"等。String常量被放在常量池中。
String對象:可以使用String類聲明對象並創建對象,例如:
String s = new String("we are students");
註:用戶無法輸出String對象的引用:
Syste.out.println(s);
輸出的是對象的實體。
String的兩個較常用的構造方法
String (char a[])
用一個字符數組a創建一個String對象。String(char a[],int startIndex,int count)
提取字符數組a中的一部分字符創建一個String對象,參數startIndex和count分別指定在a中提取字符的起始位置和從該位置開始截取的字符個數。
字符串的並置
String對象可以用“+”進行並置運算,即首尾相接得到一個新的String對象。
如果是兩個常量進行並置運算,那麽得到的仍然是常量,如果常量池沒有這個常量就放入常量池。
參與並置運算的String對象,只要有一個是變量,那麽Java就會在動態區存放所得到的新String對象的實體和引用。
String類的常用方法
public int length():獲取一個字符串的長度
public boolean equals(String s):判斷當前String對象的字符序列是否與參數s指定的String對象的字符序列相同
public boolean startsWith(String s):
判斷當前String對象的字符序列前綴是否是參數指定的String對象s的字符序列public boolean endsWith(String s):
判斷當前String對象的字符序列後綴是否是參數指定的String對象s的字符序列public int compareTo(String s):按字典序與參數s指定的字符序列比較大小。
public boolean contains(String s):String對象調用contains方法判斷當前String對象的字符序列是否包含參數s的字符序列
public int indexOf (String str):String對象調用方法從當前String對象的字符序列的0索引位置開始檢索首次出現str的字符序列的位置,並返回該位置。如果沒有檢索到,該方法返回的值是–1。
public int lastIndexOf(String s):從當前String對象的字符序列的0索引位置開始檢索最後一次出現str的字符序列的位置,並返回該位置。如果沒有檢索到,該方法返回的值是-1。
public String substring(int startpoint):字符串對象調用該方法獲得一個新的String對象,新的String對象的字符序列是復制當前String對象的字符序列中的startpoint位置至最後位置上的字符所得到的字符序列。String對象調用substring(int start ,int end)方法獲得一個新的String對象,新的String對象的字符序列是復制當前String對象的字符序列中的start位置至end–1位置上的字符所得到的字符序列。
public String trim() :得到一個新的String對象,這個新的String對象的字符序列是當前String對象的字符序列去掉前後空格後的字符序列。
字符串與基本數據的相互轉化
Java.lang包中的Integer類調用其類方法:
public static int parseInt(String s)
可以將由“數字”字符組成的字符串。
public static byte parseByte(String s) throws NumberFormatException
public static short parseShort(String s) throws NumberFormatException
public static long parseLong(String s) throws NumberFormatException
public static float parseFloat(String s) throws NumberFormatException
public static double parseDouble(String s) throws NumberFormatException
可以使用String 類的類方法將數值轉化為String對象:
public static String valueOf(byte n)
public static String valueOf(int n)
public static String valueOf(long n)
public static String valueOf(float n)
public static String valueOf(double n)
對象的字符串表示
Object類有一個public String toString()
方法,一個對象通過調用該方法可以獲得該對象的字符序列表示。一個對象調用toString()方法返回的String對象的字符序列的一般形式為:
創建對象的類的名字@對象的引用的字符串表示
字符串與字符數組
String 類的構造方法:
String(char[])
;
String(char[],int offset,int length)
:分別用字符數組中的全部字符和部分字符創建字符串對象將String對象的字符序列存放到數組中的方法:
public void getChars(int start,int end,char c[],int offset )
:將String對象的部分字符序列存放到數組中。
public char[] toCharArray()
:將String對象的全部字符序列存放到數組中。
字符串與字節數組
構造方法
String(byte[])
:用指定的字節數組構造一個字符串對象。
String(byte[],int offset,int length)
:用指定的字節數組的一部分,即從數組起始位置offset開始取length個字節構造一個字符串對象。相關方法:
public byte[] getBytes()
:使用平臺默認的字符編碼,將當前String對象的字符序列存放到字節數組,並返回數組的引用。
public byte[] getBytes(String charsetName)
:使用參數指定字符編碼,將當前String對象的字符序列存放到字節數組,並返回數組的引用。
正則表達式
正則表達式是一個String對象的字符序列,該字符序列中含有具有特殊意義字符,這些特殊字符稱做正則表達式中的元字符。
String對象調用
public boolean matches(String regex)
方法可以判斷當前String對象的字符序列是否和參數regex指定的正則表達式匹配。
2、StringTokenizer類
使用StringTokenizer對象分解String對象的字符序列
兩個常用構造方法:
StringTokenizer(String s)
:為String對象s構造一個分析器,使用默認的分隔標記,即空格符,換行符,回車符,tab符,進紙符做分割標記StringTokenizer(Strings,String delim)
:為String對象s構造一個分析器,參數delim的字符序列中的字符的任意排列被作為分隔標記
StringTokenizer對象稱作一個字符串分析器可以使用下列方法:
nextToken()
:逐個獲取字符串中的語言符號(單詞),字符串分析器中的負責計數的變量的值就自動減一 。hasMoreTokens()
:只要字符串中還有語言符號,即計數變量的值大於0,該方法就返回true,否則返回false。countTokens()
:得到分析器中計數變量的值
3、Scanner類
使用Scanner類從字符串中解析程序所需要的數據。
Scanner對象:可以解析字符序列中的單詞
scanner將空格做為分隔標記來解析字符序列中的單詞,具體解析操作:
Sanner對象調用next()方法依次返回被解析的字符序列中的單詞,如果最後一個單詞已被next()方法返回,Scanner對象調用hasNext()將返回false,否則返回ture
對於被解析的字符序列中的數字型單詞,Scanner對象可以用nextInt()或nextDouble()方法來代替next()方法
如果單詞不是數字型單詞,Scanner對象調用nextInt()或nextDouble()方法將數字型單詞轉化為int或double數據返回
如果單詞不是數字型單詞,Scanner對象調用nextInt()或nextDOuble()方法將發生InputMismatchException異常,在處理異常時可以調用next()方法返回非數字化單詞。
使用正則表達式作為分隔標記解析字符串
Scanner對象可以調用 useDelimiter(正則表達式); 方法將一個正則表達式作為分隔標記,即和正則表達式匹配的字符串都是分隔標記。
4、StringBuffer類
三個構造方法:
- StringBuffer()
- StringBuffer(int size)
- StringBuffer(String s)
StringBuffer類的常用方法:
- append方法
StringBuffer append(String s)
:將String對象s的字符序列追加到當前StringBuffer對象的字符序列中,並返回當前StringBuffer對象的引用
StringBuffer append(int n)
:將int型數據n轉化為String對象,再把該String對象的字符序列追加到當前StringBuffer對象的字符序列中,並返回當前StringBuffer對象的引用
StringBuffer append(Object o)
:將一個Object對象o的字符序列表示追加到當前String- Buffer對象的字符序列中,並返回當前StringBuffer對象的引用
- public chat charAt(int n)和public void setCharAt(int n ,char ch)
public chat charAt(int n )
:得到參數n指定的置上的單個字符
public void setCharAt(int n ,char ch)
:將當前StringBuffer對象實體中的字符串位置n處的字符用參數ch指定的字符替換
StringBuffer insert(int index, String str)
:將參數str指定的字符串插入到參數index指定的位置public StringBuffer reverse()
:將該對象實體中的字符翻轉StringBuffer delete(int startIndex, int endIndex)
:從當前StringBuffer對象實體中的字符串中刪除一個子字符串StringBuffer replace(int startIndex,int endIndex,String str)
:將當前StringBuffer對象實體中的字符串的一個子字符串用參數str指定的字符串替換
5、Date與Calendar類
Date類
Date類的構造方法一:Date()使用Date類的無參數構造方法創建的對象可以獲取本地當前時間
Date類的構造方法二:Date(long time)使用long型參數創建指定的時間
計算機系統將其自身的時間的“公元”設置在1970年1月1日0時(格林威治時間),可以根據這個時間使用Date的帶參數的構造方法:Date(long time)來創建一個Date對象。
Calendar類
使用Calendar類的static方法 getInstance()可以初始化一個日歷對象。
calendar對象可以調用方法:
public final void set(int year,int month,int date) public final void set(int year,int month,int date,int hour,int minute) public final void set(int year,int month, int date, int hour, int minute,int second)
其作用是將日歷翻到任何一個時間。
6、Math、BigInteger和Random類
Math類
Math類在java.lang包中。Math類包含許多用來進行科學計算的類方法,這些方法可以直接通過類名調用。另外,Math類還有兩個靜態常量,它們分別是:
E 2.7182828284590452354
和PI 3.14159265358979323846
。Math類的常用類方法:
public static long abs(double a)
返回a的絕對值。
public static double max(double a,double b)
返回a、b的最大值。
public static double random()
產生一個0到1之間的隨機數(不包括0和1)。
public static double pow(double a,double b)
返回a的b次冪。
public static double sqrt(double a)
返回a的平方根。
public static double log(double a)
返回a的對數。
public static double sin(double a)
返回正弦值。
public static double asin(double a)
返回反正弦值。
BigInteger類
java.math包中的BigInteger類提供任意精度的整數運算。可以使用構造方法:
public BigInteger(String val)
構造一個十進制的BigInteger對象。BigInteger類的常用類方法:
public BigInteger add(BigInteger val)
返回當前大整數對象與參數指定的大整數對象的和。
public BigInteger subtract(BigInteger val)
返回當前大整數對象與參數指定的大整數對象的差。
public BigInteger multiply(BigInteger val)
返回當前大整數對象與參數指定的大整數對象的積。
public BigInteger divide(BigInteger val)
返回當前大整數對象與參數指定的大整數對象的商。
public BigInteger remainder(BigInteger val)
返回當前大整數對象與參數指定的大整數對象的余。
public int compareTo(BigInteger val)
返回當前大整數對象與參數指定的大整數的比較結果,返回值是1、-1或0,分別表示當前大整數對象大於、小於或等於參數指定的大整數。
public BigInteger pow(int a)
返回當前大整數對象的a次冪。
public String toString()
返回當前大整數對象十進制的字符串表示。
public String toString(int p)
返回當前大整數對象p進制的字符串表示。
Random類
用於獲得隨機數
- Random類的如下構造方法:
public Random()
;
public Random(long seed)
;使用參數seek指定的種子創建一個Random對象
第十五章 泛型與集合框架
1、泛型
泛型(Generics),的主要目的是可以建立具有類型安全的集合框架,如鏈表、散列映射等數據結構。
泛型類的聲明
- 可以使用
class 名稱<泛型列表>
聲明一個類,為了和普通的類有所區別,這樣聲明的類稱作泛型類,如:
class People
使用泛型類聲明對象
泛型類聲明和創建對象時,類名後多了一對“<>”,而且必須要用具體的類型替換“<>”中的泛型。例如:
Cone<Circle> coneOne; coneOne =new Cone<Circle>(new Circle());
2、鏈表
鏈表是由若幹個稱作節點的對象組成的一種數據結構,每個節點含有一個數據和下一個節點的引用 。
LinkedList
LinkedList<String> mylist=new LinkedList<String>();
創建一個空雙鏈表。
add(E obj)
向鏈表依次增加節點。
LinkedList
public boolean add(E element)
向鏈表末尾添加一個新的節點,該節點中的數據是參數elememt指定的數據。public void add(int index ,E element)
向鏈表的指定位置添加一個新的節點,該節點中的數據是參數elememt指定的數據。public void clear()
刪除鏈表的所有節點,使當前鏈表成為空鏈表。public E remove(int index)
刪除指定位置上的節點。public boolean remove(E element)
刪除首次出現含有數據elemen的節點。public E get(int index)
得到鏈表中指定位置處節點中的數據。
LinkedList
public void addFirst(E element)
向鏈表的頭添加新節點,該節點中的數據是參數elememt指定的數據。public void addLast(E element)
向鏈表的末尾添加新節點,該節點中的數據是參數elememt指定的數據。public E getFirst()
得到鏈表中第一個節點中的數據。public E getLast()
得到鏈表中最後一個節點中的數據。public E removeFirst()
刪除第一個節點,並返回這個節點中的數據。
Collections類
Collections類提供的用於排序和查找的類方法如下:
public static sort(List<E> list)
該方法可以將list中的元素升序排列。int binarySearch(List<T> list, T key,CompareTo<T> c)
使用折半法查找list是否含有和參數key相等的元素,如果key鏈表中某個元素相等,方法返回和key相等的元素在鏈表中的索引位置(鏈表的索引位置從0考試),否則返回-1。public static void shuffle(List<E> list)
將list中的數據按洗牌算法重新隨機排列。static void rotate(List<E> list, int distance)
旋轉鏈表中的數據。public static void reverse(List<E> list)
翻轉list中的數據
3、堆棧
堆棧是一種“後進先出”的數據結構,只能在一端進行輸入或輸出數據的操作。
Stack:
public E push(E item)
:實現壓棧操作public E pop()
:實現彈棧操作。public boolean empty()
:判斷堆棧是否還有數據。public E peek()
:獲取堆棧頂端的數據,但不刪除該數據。public int search(Object data)
:獲取數據在堆棧中的位置
4、散列映射
HashMap
HashMap
常用方法
public void clear()
清空散列映射。public Object clone()
返回當前散列映射的一個克隆。public boolean containsKey(Object key)
如果散列映射有“鍵/值”對使用了參數指定的鍵,方法返回true,否則返回false。public boolean containsValue(Object value)
如果散列映射有“鍵/值”對的值是參數指定的值。public V get(Object key)
返回散列映射中使用key做鍵的“鍵/值”對中的值。public boolean isEmpty()
如果散列映射不含任何“鍵/值”對,方法返回true,否則返回false。public V remove(Object key)
刪除散列映射中鍵為參數指定的“鍵/值”對,並返回鍵對應的值。public int size()
返回散列映射的大小,即散列映射中“鍵/值”對的數目。
遍歷散列映射
public Collection<V> values()
方法返回一個實現Collection
5、樹集
TreeSet:TreeSet
TreeSet類的常用方法
public boolean add(E o)
向樹集添加加節點。public void clear()
刪除樹集中的所有節點。public void contains(Object o)
如果樹集中有包含參數指定的對象,該方法返回true,否則返回false 。public E first()
返回樹集中的第一個節點中的數據(最小的節點)。public E last()
返回最後一個節點中的數據(最大的節點)。public isEmpty()
判斷是否是空樹集,如果樹集不含任何節點,該方法返回true 。public boolean remove(Object o)
刪除樹集中的存儲參數指定的對象的最小節點。public int size()
返回樹集中節點
6、樹映射
TreeMap
樹映射使用public V put(K key,V value);方法添加節點。
代碼調試中的問題和解決過程
問題1:在編譯運行Example8_7時,運行出的結果有問題,截圖如下
解決過程:仔細檢查過代碼,發現沒有編寫問題,查看運行結果,結果中顯示字符串的字節長度是10,與GB2312編碼的8不同,我猜想是UTF-8中漢字的字節長度與GB2312不同,我計算出UTF-8中漢字的字節長度為3,根據這個改正代碼後,能夠正常運行。運行結果如下:由此可以得到結論:GB2312中漢字字節長度為2,UTF-8中漢字的字節長度為3。
問題2:編譯Example15_8時提示:Exception in thread "main" java.lang.NoSuchMethodError:Student。
解決過程:提示有同類名的類在同一個包或工程中,改變Example15_8和Example15_9中同名的Student類,並保存,就可以正常運行。
碼雲鏈接:
https://gitee.com/besti-is-java-2018/20165318_sun_xiaoxuan
代碼托管:
20165318 2017-2018-2 《Java程序設計》第六周學習總結