JAVA學習筆記(三),java學習筆記
@SuppressWarnings("resource")是用來壓制資源流失警告的。比如使用io類,最後沒有關閉。
Set集合特點:
1)無序,不隨機
2)元素唯一
3)沒下標
注意:Collection List Set 是介面
注意:因為Set 沒有下標,所以取值是不能用for,只能用迭代器
HashSet: 內部結構是雜湊表,所以元素唯一,無序,沒下標。
TreeSet: 內部是二叉樹,元素可以進行比較,可以按自然順序比較,也可以由程式員自訂比較方式,沒下
標。
LinkedHashSet:內部結構是雜湊表及鏈表組成,所以有序,元素唯一,沒下標。
HashSet:
HashSet<String> ss = new HashSet<String>();
ss.add("a");
ss.add("k");
ss.add("d");
ss.add("k");
Iterator<String> its = ss.iterator();
while (its.hasNext()) {
System.out.println(its.next());
}
結果:無序的
LinkedHashSet:
LinkedHashSet<String> s = new LinkedHashSet<String>();
s.add("a");
s.add("g");
s.add("d");
s.add("g");
Iterator<String> it = s.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
結果:a g d 有序(按存入的順序取出)
Map介面特點:有鍵(key),值(value)且成雙出現。
Map介面中的方法
1.添加 V put(K key, V value)
2.刪除 V remove(Object key)
void clear()
3.判斷 boolean isEmpty()
boolean containsKey(Object key)
boolean containsValue(Object value)
4.擷取 V get(Object key)
int size()
Set<K> keySet()
Map取值
//不重,沒序,沒下標,沒迭代,值成雙出現,key和value都可能為空白(可以同時為空白),如果key相同,會覆
蓋value
Map<String,String> map = new HashMap<String,String>();
map.put("1","aa");
map.put("2","bb");
map.put("3","cc");
map.put("4","ff");
map.put("5","ff");
//map.get("5");//一個一個取
Set<String> set = map.keySet();//當前set中存的都是key
Iterator <String> it =set.iterator();
while(it.hasNext()){
String key = it.next();
String value = map.get(key);
System.out.println("key="+key+",value="+value);
}
HashMap 和HashTable的區別
HashMap:線程不安全,速度快,允許存放null鍵,null值。
Hashtable:安全執行緒,速度慢,不允許存放null鍵,null值,已被HashMap替代。
TreeMap:對鍵進行排序,排序原理與TreeSet相同。
For迴圈的新用法:
ArrayList<String> list = new ArrayList<String> ();
list.add("a");
list.add("b");
//1)普通for
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
//2)增強for
for(String temp : list)
{System.out.println(temp);
}
注意:1)增強for要和泛型一起使用
2)增強for沒有下標
為什麼要有封裝類:方便我們操作基礎資料型別 (Elementary Data Type)中的資料
注意:
char(字元型)Character
int(整型)Integer
其餘的 首字母大寫
基礎資料型別 (Elementary Data Type)------------字串
1)+字串聯結符
int i = 1;
String str = i + "";
2)String 裡有方法
String str2=String.valueOf(i);
字串-------基礎資料型別 (Elementary Data Type)
String str3="a";
int a=Integer.parseInt(str3);
注意:字串必須是數字,否則報錯NumberFormatException
封裝類------ 基礎資料型別 (Elementary Data Type)
Integer itsss = new Integer("20");
int age = itsss.intValue();
自動裝箱與自動拆箱
以前: int m = 4;
int n = 5;
int b = m + n;
如果:Integer m= new Integer(4);
int b=m.intValue()+5; --->m由封裝類變成基礎資料型別 (Elementary Data Type)後+5
現在 :JDK5.0以後新出功能
Integer p=4;//自動裝箱(基礎資料型別 (Elementary Data Type)轉成封裝類)
int b=p+5; //自動拆箱(封裝類轉成基礎資料型別 (Elementary Data Type))
List<Integer> list = new ArrayList<Integer>();
list.add(1);//自動裝箱(基礎資料型別 (Elementary Data Type)轉成封裝類)
好處:方便程式編寫。
封裝類中的equals( )方法
封裝類重寫Object中的equals( )方法 ,比較的是數值是否相等
Integer a1= new Integer("20");
Integer a2= new Integer(20);
System.out.println(a1.equals(a2));//true
封裝類中的compareTo( )方法
public int compareTo(Integer anotherInteger)
Integer a1= new Integer("40");
Integer a2= new Integer(30);
System.out.println(a1.compareTo(a2));
a1的值==a2 的值返回0
a1的值<a2 的值返回負數
a1的值>a2 的值返回正數
Object類:是所有類的根類,本類中的所有方法,所有類都繼承。
equals與==
1)基礎資料型別 (Elementary Data Type)的比較:
3==3 true(比較的是值)
2)對象的比較:
New Person( ) == New Person( ) false(比較的是記憶體位址)
3)對象的比較:
New Person( ).equals( New Person( ) ) false(比較的是記憶體位址)
4)String 類中的equals,重寫了Object中的equals,比較的是字串的內容
==比較的是地址
hashCode
返回該對象的雜湊碼值:
New Person( ).hashCode() -->int 值25860399 對象的地址10進位的
Integer.toHexString(25860399)->10進位數轉成16進位數
類似於a.ForTest@18a992f
雜湊碼值就是對象的地址值。
getClass
對象名.getClass();得到當前對象的包名及類名
toString
ForTest f6 = new ForTest();
System.out.println(f6); //f6 相當於f6.toString(),它預設調用Object類中的toString()方法
注意:
如果我們在ForTest 類中重寫toString(),那麼System.out.println(f6); 後輸出的值是重寫方法裡的值。
1)常量池(直接賦值的):
String a = “abc”; -->在池中建立”abc”串
a=“bcd”--->“在池中建立”bcd”串
a = “abc”; --->用池中已建立好的”abc”串
2)String a = new String(“aa”);---->“aa”不在池中在對象中
String類常用方法
1.擷取字串的長度int length()
2.根據位置擷取字元char charAt(int index)
3.根據字元擷取在字串中第一次出現的位置
int indexOf(String str)
int indexOf(String str, int fromIndex) 從指定位置開始尋找
4.根據字元擷取在字串中第一次出現的位置
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex) 從指定位置開始尋找
5.擷取字串中一部分字串,也叫子串
String substring(int beginIndex)
String substring(int beginIndex, int endIndex) beginIndex - 起始索引(包括) endIndex -
結束索引(不包括)。
6.轉換
1)字串轉換成字串數組(切割)
String[] split(String regex) ,# 空格 \ .
2)字串轉換成字元數組
char[] toCharArray()
3)字串轉換成位元組數組
byte[] getBytes()
4)將字串中的字元全部大寫
String toUpperCase()
5)將字串中的字元全部小寫
String toLowerCase()
6)將字串中的內容進行替換
String replace(char oldChar, char newChar)
7)將字串兩端空格去掉
String trim()
8)字串串連
String concat(String str)
9)將基本類型變成字串
static String valueOf(Object obj) 100變成字串
7.判斷
1)比較字串內容:
boolean equals(Object anObject)
2)不考慮大小寫比較字串內容:
boolean equalsIgnoreCase(String anotherString)
3)字串是否包含指定字串
boolean contains(String s)
4)字串是否以指定字串開頭,以指定字串結尾
boolean startsWith(String prefix) 測試此字串是否以指定的首碼開始。
boolean endsWith(String suffix) 測試此字串是否以指定的尾碼結束 (區分大小寫)
8.比較
int compareTo(String anotherString)
StringBuffer類
是字串緩衝區,串緩衝區的作用就是為了方便操作字串
StringBuffer類特點
1.長度可變
2.可以儲存不同類型的資料
3.接收不同類型資料,最終要轉成字串進行使用
StringBuffer sb = new StringBuffer("aa");
System.out.println(sb.toString());
4.可對字串進行修改
StringBuffer構造方法
StringBuffer sb = new StringBuffer( ); 緩衝區是空的,長度是0
StringBuffer sb = new StringBuffer("aa"); 緩衝區不是空的,長度是2
StringBuffer方法
1.添加
StringBuffer append(boolean b)
StringBuffer insert(int offset, boolean b)
2.刪除
public StringBuffer delete(int start, int end) 不包括end
StringBuffer deleteCharAt(int index) 刪除某一個位置上的字元
3.尋找
char charAt(int index)尋找某一個位置上的字元
int indexOf(String str)尋找指定字串的下標
int lastIndexOf(String str)
4.修改
StringBuffer replace(int start, int end, String str) 不包括end
void setCharAt(int index, char ch)
5.反轉
StringBuffer reverse()
finalize()
記憶體回收行程在進行回收之前要調用的方法,此方法一般用於釋放資源。
System.gc():建議記憶體回收行程幹活。一般不手動使用。
Math類
static double ceil(double a) 返回大於參數的最小整數
static double floor(double a)返回小於參數的最大整數
static int round(float a)四捨五入
static double pow(double a, double b) a的b次方
static double random()返回帶正號的 double 值,該值大於等於0.0且小於1.0。
System類
返回以毫秒為單位的目前時間。
static long currentTimeMillis()
static void exit(int status)終止當前正在啟動並執行 JAVA 虛擬機器。 status=0正常、1異常退出
static void gc()“建議”運行記憶體回收行程。
Date
當前系統時間。位置於java.util包
方法:
new Date(); //得到系統的目前時間 顯示格式不是中國方式
new Date(long date); //通過毫秒數得到年月日,分時秒
long getTime() //得到當前毫秒數
System.currentTimeMillis(); //得到當前毫秒數
注意:日期對象與毫秒之間的轉換
1)日期對象--轉換----》毫秒
Date d = new Date();
long lo = d.getTime();
2)毫秒--轉換----》日期對象
Date d =new Date(lo);
DateFormat
格式化時間用的(格式的風格是固定的)位置於java.text包
這個DateFormat是一個抽象類別,不能建立對象
格式器的獲得:
DateFormat.getDateInstance();這種格式器只有年-月-日
DateFormat.getDateTimeInstance();//年-月-日 時:分:秒
DateFormat.getDateInstance(int 參數)://通過參數來指定風格
例子:
Date d =new Date();
DateFormat df = DateFormat.getDateInstance();//2016-10-27 Thu Oct 27 10:57:57
CST 2016------format------->2016-10-27
String dateStr=df.format(d);
System.out.println(dateStr);
DateFormat df1 = DateFormat.getDateTimeInstance();//2016-10-27 10:36:38 Thu Oct
27 10:57:57 CST 2016------format------->2016-10-27 10:36:38
String dateStr1 = df1.format(d);
System.out.println(dateStr1);
DateFormat df2 = DateFormat.getDateInstance(DateFormat.FULL);//2016年10月27日 星
期四
String dateStr2= df2.format(d);
System.out.println(dateStr2);
DateFormat df3 = DateFormat.getDateInstance(DateFormat.LONG);//2016年10月27日
String dateStr3= df3.format(d);
System.out.println(dateStr3);
DateFormat df4 = DateFormat.getDateInstance(DateFormat.SHORT);//16-10-27
String dateStr4= df4.format(d);
System.out.println(dateStr4);
DateFormat df5 = DateFormat.getDateInstance(DateFormat.MEDIUM);//2016-10-27
String dateStr5= df5.format(d);
System.out.println(dateStr5);
SimpleDateFormat
格式化時間用的(格式的風格是自訂的)位置於java.text包。通過參數來指定格式
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yy--MM--dd HH-mm-ss");
String str = sdf.format(d);
System.out.println(str);
結果:16--03--05 09-20-22
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = sdf.parse("2009-06-14 09:20:22");
把字串類型的日期轉成Date類型的日期
Calendar
日曆 位置於java.util包
是一個抽象類別,不能建立對象、
得到日曆:
Calendar rightNow = Calendar.getInstance();
System.out.println(rightNow);
用日曆中的方法,得到值:
int year = rightNow.get(Calendar.YEAR);//取日曆中的年
System.out.println(year);
int month = rightNow.get(Calendar.MONTH);//取日曆中的月 從0開始
System.out.println(month);
int date = rightNow.get(Calendar.DAY_OF_MONTH);//取日曆中的日 1)DAY_OF_MONTH 2)
DATE 都是從1開始,兩個參數是一樣的
System.out.println(date);
int weekday = rightNow.get(Calendar.DAY_OF_WEEK);//取日曆中的星期幾 從周日 開始
算為1 星期4,就是5
System.out.println(weekday);