1. 程式人生 > >JAVA學習筆記(三)

JAVA學習筆記(三)

byte repl efi ber 時間 clas 區分大小寫 增強for size

@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沒有下標

為什麽要有包裝類:方便我們操作基本數據類型中的數據
註意:
char(字符型) Character
int(整型) Integer
其余的 首字母大寫
基本數據類型------------字符串
1)+字符串聯接符
int i = 1;
String str = i + "";
2)String 裏有方法
String str2=String.valueOf(i);
字符串-------基本數據類型
String str3="a";
int a=Integer.parseInt(str3);
註意:字符串必須是數字,否則報錯NumberFormatException
包裝類------ 基本數據類型
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由包裝類變成基本數據類型後+5
現在 :JDK5.0以後新出功能
Integer p=4;//自動裝箱(基本數據類型轉成包裝類)
int b=p+5; //自動拆箱(包裝類轉成基本數據類型)
List<Integer> list = new ArrayList<Integer>();
list.add(1);//自動裝箱(基本數據類型轉成包裝類)
好處:方便程序編寫。
包裝類中的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)基本數據類型的比較:
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進制數
[email protected]
哈希碼值就是對象的地址值。
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);

JAVA學習筆記(三)