1、String常用方法
charAt(int index) 返回指定索引的 char值
compareTo(String anotherString) 比較兩個字符串的字典,返回int類型
compareToIgnoreCase(String str) 按字典順序比較兩個字符串,忽略大小寫的差異
concat(String str) 返回新的字符串,將指定的字符串拼接此字符串,此字符串結尾
endsWith(String suffix) 判斷這個字符串是否已以指定的后綴結束
indexOf(String str) 返回此字符串的指定子字符串中第一個出現的索引位置
indexOf(String str, int fromIndex) 返回此字符串的指定子字符串中第一個出現在索引中的位置,從指定索引處開始
length() 返回此字符串的長度
subSequence(int beginIndex, int endIndex) 返回一個字符序列的子序列。
toCharArray() 將此字符串轉換為一個新的字符數組
valueOf(boolean b) 返回的 boolean參數的字符串表示形式
2、toString()
1、所有類間接或直接繼承Object,所以每個類都有toString()
2、Object的toString()方法:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Println()中的參數如果沒有(顯示調用)調用toString(),
只要是引用類型(除了String類型、基本類型形式(int char)、基本類型的引用數組類型(char[] int[]等))都是在Println()方法中默認調用toString()
3、什么時候重寫toString()
當打印輸出一個引用,想輸出自己想要的信息的時候,一般要重寫toString()
public class Student{
public String name;
public int age,id;
public Student (String name,int age,int id) {
this.name = name;
this.age = age;
this.id = id;
}
//重寫toString ()方法
public String toString () {
return "name:"+name+"age:"+age+"id:"+id;
}
}
public class Test{
Student s = new Student ("張三",18,16101);
System.out.println(s);
}
運行:
name:張三age:18id:16101
3、equals()
1、String類型有自己的equals(),比較的是兩個字符串的內容是否相同
2、Object的equals():
public boolean equals(Object obj) {
return (this == obj);
}
實際上只是用“==”比較,“==”比較是地址和內容
3、什么時候重寫equals()
當我們要判斷兩個對象的內容是否相等時(忽略地址),一般需要重寫equals()方法
4、重寫equals(),一定要重寫HashCode()
根據一個類的equals方法(改寫后),兩個截然不同的實例有可能在邏輯上是相等的,但是,根據Object.hashCode方法,它們僅僅是兩個對象。因此,違反了“相等的對象必須具有相等的散列碼”
public class Student{
public String name;
public int age,id;
public Student (String name,int age,int id) {
this.name = name;
this.age = age;
this.id = id;
}
//重寫hashCode()
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
//重寫equals()
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
public class Test{
Student s1 = new Student ("張三",18,16101);
Student s2 = new Student ("張三",18,16101);
System.out.println(s1.equals(s2));
}
運行:
true
4、compareTo()
定義:比較此對象與指定對象的順序。
返回:負整數、零或正整數。如果該對象小於、等於或大於指定對象,則分別返回負整數、零或正整數。
1、重寫compareTo()需要先實現Comparable接口
Comparable接口:
public interface Comparable<T>{
int compareTo(T t);
}
2、什么時候重寫compareTo()
按字母排序,按數字排序,年代排序等等某種**定制排序**
TreeSet集合的參數類型為基本數據類型TreeSet是默認按照元素從小到大排序
public class treeSet {
public static void main(String[] args) {
Set<Integer> t = new TreeSet<Integer>();
t.add(10);t.add(2);t.add(5);t.add(16);t.add(11);
for (Integer in : t) {
System.out.print(in);
}
}
}
運行:
2 5 10 11 16
TreeSet集合的參數類型為自定義類型時,需要實現Comparable接口,並重寫compareTo()
public class Student implements Comparable<Student>{
String name;
int age,id;
public Student (String name,int age,int id) {
this.name = name;
this.age = age;
this.id = id;
}
@Override
public String toString () {
return "name:"+name+"age:"+age+"id:"+id;
}
//重寫compareTo方法,按Student的id從小到大排序
@Override
public int compareTo(Student s) {
if(this.id>s.id)
return 1;
else if(this.id==s.id)
return 0;
else
return -1;
}
}
public class Test03 {
public static void main(String[] args) {
Student s1 = new Student ("zhang1",18,16101);
Student s2 = new Student ("zhang2",28,16102);
Student s3 = new Student ("zhang3",38,16103);
Set<Student> st = new TreeSet<Student>();
st.add(s2);st.add(s3);st.add(s1);
for (Student student : st) {
System.out.println(student);
}
}
}
運行:
name:zhang1age:18id:16101
name:zhang2age:28id:16102
name:zhang3age:38id:16103