Java總結 1104/1105

A: 數組 
1.選擇排序:
數組0的索引依次和後面的進行比較,對應的元素小的往前放,依次比較,這樣就可以得到一個排好序的數組
程序代碼:
public static void selectSort(int [] arr){
for(int i=0; i<arr.length; i++){
for(int j=i+1; j<arr.length-1; i++){
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}

}
2.二分查找:
針對的數組一定是有序的
1)定義最小索引和最大索引
  2)計算出中間索引
  3)拿中間索引對應的元素和要查找的元素進行比較
  如果相等:直接返回中間索引
  不相等:
  大了,左邊找
  小了,右邊找
  4)重新獲取最小索引和最大索引,計算出中間索引
  5)回到3)繼續查找
程序代碼:
public static int getIndex(int [] arr , int value){
int min = 0;
int max = arr.length-1;
int mid = (min+max)/2;
while(arr[mid] != value){
if(arr[mid] > value){
max = mid-1;
}else if(arr[mid] < value){
max = mid+1;
}
if(min > max){
return -1;
}
mid = (max+min)/2;
}
return mid;
}
3.Arrays類:
Arrays:此類包含用來操作數組(比如排序和搜索)的各種方法(針對數組操作的工具類)
常用的幾個方法:
public static String toString(int[] a):將任意類型的數組以字符串形式顯示出來!
  public static void sort(int[] a):快速排序:(將給定數組中元素升序排序)
public static int binarySearch(int[] a, int key):當前int數組一定是有序數組
使用二分搜索法來搜索指定的 int 型數組,以獲得指定的值
B: BigDecimal: 
對於浮點類型的數據類說,他們存儲和整數的存儲是不一致的,是按照有效數字位來進行存儲的,浮點類型的數據計算的時候
容易損失精度,計算出來的結果不精確,Java針對這種情況:提供了這個
BigDecimal:
作用:來提供浮點類型數據的精確計算!可變的、任意精度的有符號十進制數
構造方式:
public BigDecimal(String val)

public BigDecimal(String val)
常用的成員方法;
public BigDecimal add(BigDecimal augend):加
public BigDecimal subtract(BigDecimal subtrahend):減
public BigDecimal multiply(BigDecimal multiplicand):乘法
public BigDecimal divide(BigDecimal divisor):除
public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
參數1:商, 參數2:保留幾位小數, 參數3:舍入的一種模式:ROUND_HALF_UP
C: BigInteger: 
BigInteger的構造方法
public BigInteger(String val)將字符串表示的數字封裝成BigInteger類型
成員方法:
public BigInteger add(BigInteger val)
public BigInteger subtract(BigInteger val)
public BigInteger multiply(BigInteger val)
public BigInteger divide(BigInteger val)
public BigInteger[] divideAndRemainder(BigInteger val)
返回一個BigInteger數組,數組中的元素:商,餘數

D: Calendar: 
Calendar:日曆類:
Calendar 類是一個抽象類,它爲特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日曆字段之間的轉換提供了一些方法,
併爲操作日曆字段(例如獲得下星期的日期)提供了一些方法
Calendar該類是一個抽象類:不能實例化的,所以通過一下這個方法來創建對象
public static Calendar getInstance()
public int get(int field)返回給定日曆字段的值

public static final int YEAR:表示日曆中 的年
public static final int MONTH:月份:是0開始計算的
public static final int DATE:和DAY_OF_MONTH是同義詞,表示月份中的某天
Calendar常用的成員方法:
public abstract void add(int field,int amount)
爲給定的日曆的字段添加或者減去時間偏移量
public final void set(int year,int month,int date)
設置日曆字段 YEAR、MONTH 和 DAY_OF_MONTH 的值


E: Date類:
Date類:日期類:
  表示特定的瞬間,精確到毫秒。
常用的構造方式:
  public Date():表示分配的一個Date對象:無參: 通過無參構造獲取當前系統的具體的時間
  public Date(long date):指定一個時間毫秒值  和它1970-1-1 00:00:00有時間差
Date中的兩個成員方法
public long getTime():獲取當前時間毫秒值
如果知道Date對象,可以通過getTime()獲取時間毫秒值
public void setTime(long time)

F: SimpleDateFormat類:
將Date對象--->String類型的日期的"文本格式":格式化
public final String format(Date date)
String類型日期的"文本格式"---->Date日期對象:解析
public Date parse(String source) 該方法本身會拋出一個異常:ParseException(解析異常:編譯時期異常)
要進行轉換:必須使用中間橋樑:DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並解析日期或時間。
日期/時間格式化子類(如 SimpleDateFormat)允許進行格式化(也就是日期Date -> 文本String)、解析(文本String-> 日期Date)和標準化
但是,DateFormat是抽象類,不能直接實例化,使用的是它更具體的子類進行實例化:
SimpleDateFormat 是一個以與語言環境有關的方式來格式化和解析日期的具體類
常用的構造方法:
Date---格式化--->String文本格式
public SimpleDateFormat(String pattern)用給定的模式和默認語言環境的日期格式符號構造 SimpleDateFormat
日期和時間模式
y 比如:2017---->yyyy
M 年中的月份:2------>MM
d   月份中的天數 :----->dd
H 小時 HH
m 小時中的分鐘數 mm
s 分鐘中的秒數 ss
注意事項:
一定要保證SimpleDateFormat中的String Pattern這個模式和當前給的字符串的文本格式的模式必須一致!


G: Math類:
Math類提供了一些數學運行的方法
常用的成員方法:
  public static int abs(int a):絕對值
  public static double ceil(double a):向上取整
  public static double floor(double a):向下取整
  public static double max(double a,double b):獲取最大值
  public static double min(double a,double b):獲取最小值
  public static double pow(double a,double b):a的b次冪
  public static double random():取值範圍:[0.0,1.0)
  public static long round(double a):四捨五入
  public static double sqrt(double a):一個數的正平方跟

H: System類:
System:該類沒有構造方法,所以字段和成員方法都用靜態修飾
常用的兩個字段:
  in ,out都和流有關係:java.io...
  
  PrintStream(字節打印流) ps = System.out ; 標準輸出流
  PrintWriter(字符打印流)
 
  InputStream  in =  System.in; 標準輸入流
  
  常用的成員方法:
  public static void gc()運行垃圾回收器。 
調用 gc 方法暗示着 Java 虛擬機做了一些努力來回收未用對象,以便能夠快速地重用這些對象當前佔用的內存,
最終調用的就是重寫之後finalize()回收不用的對象!
public static void arraycopy(Object src,int srcPos,Object dest, int destPos,int length)
指定源數組中複製一個數組,複製從指定的位置開始,到目標數組的指定位置結束
public static void exit(int status)終止當前正在運行的 Java 虛擬機。參數用作狀態碼;根據慣例,非 0 的狀態碼錶示異常終止。
public static long currentTimeMillis():返回當前的時間毫秒值

I: 正則表達式:
正則表達式常用的語法:
A:字符
x 字符 x :任意的字符
\\ 反斜線字符 在代碼中書寫正則表達式:\------>用兩個\\代表一個反斜線
\t 製表符 ('\u0009')
\n 新行(換行)符 ('\u000A') IO流中要寫入換行符號:windows "\r\n"
\r 回車符 ('\u000D') 


B:字符類
[abc] a、b 或 c(簡單類) 

[^abc] 任何字符,除了 a、b 或 c(否定) 

[a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(範圍) :當前字母大小均可

C:預定義字符類


. 任何字符 郵箱裏面:如果本身就是.,那麼在寫正在表達式的時候,\.將當前.轉義

\d 數字:[0-9] \d在正則表達式應用的時候:[0-9]--->\\d

\w 單詞字符:[a-zA-Z_0-9]:簡單一些字符串,單詞字符(規則:數字或者字母)
javascript:[a-zA-Z0-9]
D:邊界匹配器
^ 行的開頭 
$ 行的結尾
\b 單詞邊界 :
hello;world:haha:xixi
E:Greedy 數量詞
X? X,一次或一次也沒有 
X* X,零次或多次
X+ X,一次或多次 
X{n}    X,恰好 n 次 
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超過 m 次 

String類的特有功能
public boolean matches(String regex)告知此字符串是否匹配給定的正則表達式。
String的分割功能:
public String[] split(String regex)根據給定正則表達式的匹配拆分此字符串
返回值類型是一個字符串數組類型
String類中的替換功能:和正則表達式有關係
public String replaceAll(String regex,String replacement)
使用給定的 replacement 替換此字符串所有匹配給定的正則表達式的子字符串。

J: Collection(集合):
集合的由來:
 我們學習java的語言,是一種面嚮對象語言,面嚮對象語言對事物的描述是通過對象體現出來的,那麼存儲很多個學生,就需要使用容器變量進行存儲
 目前:學習過哪些容器變量呢?
數組,StringBuffer/StringBuilder,對於數組來說,數組的長度是固定的,不符合實際需求(長度不可變);對於StringBuffer來說始終在內存中返回
 的是字符串類型,也不滿足元素類型變化的要求;所以,Java就提供了一個技術:集合!
 面試題:
集合和數組的區別?
1)長度的區別:
數組:長度是固定的;
集合:長度是可變的
2)存儲數據類型的區別:
數組:可以存儲引用類型,可以存儲基本數據類型
集合:只能存儲引用類型
3)存儲元素的區別
數組:在同一個數組中,只能存儲同一種數據類型的元素;舉例 數組:杯子:只能裝水
集合:可以 存儲多種數據類型的元素;   舉例:集合:杯子:裝水,其他飲料...
 
 集合是可以存儲多種類型的元素,但是,需求如果變化,針對集合來說,Java提供了很多集合類,每一種集合類的數據結構不一樣,所以,將他們之間的共性內容抽取出來,就行了
 一個集合的繼承體系圖!
 
 數據結構:存儲數據的方式
 
 Collection: 表示一組對象,這些對象也稱爲 collection 的元素。一些 collection 允許有重複的元素,而另一些則不允許。
 一些 collection 是有序的,而另一些則是無序的。JDK 不提供此接口的任何直接 實現:它提供更具體的子接口(如 Set 和 List)實現
 
 Collection的一些功能
 添加功能:
boolean add(Object e):給集合中添加指定的元素
boolean addAll(Collection c):添加一個集合中的所有元素
 刪除功能:
void clear():刪除一個集合中的所有元素,暴力刪除,(不建議使用)
boolean remove(Object o):刪除一個集合中的指定元素
boolean removeAll(Collection c):刪除一個集合中的所有元素?思考:刪除所有算是刪除還是刪除一個算是刪除?
 判斷功能:
boolean contains(Object o):判斷一個集合中是否包含指定的單個元素
boolean containsAll(Collection c):判斷一個集合中是否另一個集合;思考:是包含一個元素算是包含還是包含所有.
boolean isEmpty():判斷集合是否爲空,如果爲空,則返回true

 交集功能:
boolean retainAll(Collection c):思考:A集合給B集合做交集,交集的元素去哪裏?返回值boolean表達什麼意思?
 獲取功能;
int size():獲取集合中的元素數
Iterator<E> iterator():迭代器
 轉換功能:
Object[] toArray():將集合轉換成數組
 
 面試題:
數組中有沒有length(),String類中有沒有length(),集合中有沒有length()?
數組:length屬性
String:length()
集合中:size()
 集合的高級功能:
boolean addAll(Collection c):添加一個集合中的所有元素
boolean removeAll(Collection c):刪除一個集合中的所有元素?思考:刪除所有算是刪除還是刪除一個算是刪除?
boolean containsAll(Collection c):判斷一個集合中是否另一個集合;思考:是包含一個元素算是包含還是包含所有
boolean retainAll(Collection c):思考:A集合給B集合做交集,交集的元素去哪裏?返回值boolean表達什麼意思?
面試題:
A集合對B集合取交集,那麼交集的元素去A集合裏面了,並且返回值boolean表達的意識是A集合中的元素是否發生變化,
如果發生變化,就返回true;否則,false
 
集合的專有遍歷方式:使用集合自己本身迭代功能遍歷集合中的元素
Iterator iterator():迭代器
Iterator:迭代器:接口
成員方法:Object next()返回迭代的下一個元素:獲取功能
 boolean hasNext():判斷一個集合中是否有下一個可以迭代的元素:判斷功能
注意::::
<迭代器第一定義只能遍歷一次  如果想再遍歷的話需要重新創建Iterator對象>

K: List(集合):
List集合的特有功能:
添加功能:
刪除功能:
Object remove(int index)移除列表中指定位置的元素,返回被刪除的元素
獲取功能:
ListIterator listIterator():列表迭代器:List集合的專有遍歷方式
Object get(int index)返回列表中指定位置的元素。
替換
set(int index,Object element)用指定元素替換列表中指定位置的元素
List集合的遍歷方式
1)toArray()
2)Collection集合中的Iterator iterator();
3)使用get()方法 和size()方法

List集合的列表迭代器

ListIterator listIterator()
列表迭代器接口中有以下幾個方法:
boolean hasNext():判斷是否有下一個可以迭代的元素(正向遍歷)
Object next():如果有可以遍歷的元素,就獲取這個元素
 
boolean hasPrevious():判斷是否有上一個可以迭代的元素(逆向遍歷)
Object  previous():如果有上一個可以迭代的元素,就獲取上一個元素
注意:
要使用逆向遍歷,前提必須有正向遍歷存在,直接使用逆向遍歷,沒有意義!

問題?
我有一個集合,如下,請問,我想判斷裏面有沒有"world"這個元素,
如果有,我就添加一個"javaee"元素,請寫代碼實現
併發(同一個時間點),並行(同一個時間段)
java.util.ConcurrentModificationException:併發修改異常:當方法檢測到對象的併發修改,但不允許這種修改時,拋出此異常。
原因:當前我們用迭代器去遍歷元素,使用集合添加的元素,對於迭代器不知道集合添加了這個元素,所以會發生這個異常
描述:使用迭代器去遍歷集合,是不能直接集合添加元素!
解決方案:
1)使用迭代器遍歷集合,使用迭代器添加元素
2)使用集合遍歷,使用集合添加元素

1)//方案1:1)使用迭代器遍歷集合,使用迭代器添加元素
Iterator it = list.iterator() ; 該迭代器中沒有添加功能,List集合中的專有遍歷方式:列表迭代器有添加功能:add(Object obj)
//將指定的元素插入到列表中(指定元素後面插入)
//ListIterator it = list.listIterator() ;
while(it.hasNext()){
String s = (String) it.next() ;

//判斷
if("world".equals(s)){
//使用迭代器添加
it.add("javaee") ;
}
}

2) for(int x = 0 ; x <list.size() ; x ++){
String s = (String) list.get(x) ;
//判斷
if("world".equals(s)){
//集合添加
list.add("javaee") ;//在末尾添加元素
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章