1.List集合接口:
允許存在重復元素蒸播,有序的集合进每,存儲先后決定存儲順序
public void add(int index, E element) : 將指定的元素歉闰,添加到該集合中的指定位置上装悲。
List接口的實現(xiàn)類:ArrayList贱除、LinkedList生闲。
ArrayList集合:底層是數(shù)組,查找快月幌、增刪慢
LinkedList集合:底層是鏈表跪腹,查找慢、增刪快
2.關于 數(shù)組飞醉,鏈表冲茸,棧,隊列之間的關系
棧和隊列是偏向于描述存让辶薄(操作)結構轴术,數(shù)組和鏈表是偏向于描述存儲結構
3.LinkedList的pop和push方法
在效果上逗栽,pop方法與removeFirst方法一樣
在效果上,push方法與addFirst方法一樣
所以失暂,Linkedlist對象的第一個元素相當于堆棧的頂部彼宠。
4.Set接口(java.util.Set)
特點:
1.不允許重復元素
2.沒有索引,所以不能使用普通的for循環(huán)遍歷
5.Set接口的實現(xiàn)類:HashSet類
1.不允許重復元素
2.沒有索引凭峡,所以不能使用普通的for循環(huán)遍歷
3.存儲順序跟放入的次序無關,是隨機的
4.底層是一個哈希表結構
6.hashcode相同一定是一個元素嗎决记?
答案是否摧冀、因為hashcode是一個邏輯地址,而不是物理地址。
若未重寫hashCode方法索昂,Object類中的hashCode方法就讓系統(tǒng)隨機給一個值
7.java中解決hashcode沖突問題是用的鏈地址法
8.內存地址缤至、hash地址、==康谆、equals方法的關系
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
String str4 = new String("abc");
System.out.println("物理地址:");
System.out.println(System.identityHashCode(str1)); //1355531311
System.out.println(System.identityHashCode(str2)); //1355531311
System.out.println(System.identityHashCode(str3)); //1967205423
System.out.println(System.identityHashCode(str4)); //42121758
System.out.println(str1 == str2); //true
System.out.println(str1 == str3); //false
System.out.println(str1 == str4); //false
System.out.println(str3 == str4); //false
System.out.println(str1.equals(str2)); //true
System.out.println(str1.equals(str3)); //true
System.out.println(str1.equals(str4)); //true
System.out.println(str3.equals(str4)); //true
System.out.println("Hash地址:");
System.out.println(str1.hashCode()); //96354
System.out.println(str2.hashCode()); //96354
System.out.println(str3.hashCode()); //96354
System.out.println(str4.hashCode()); //96354
}
由此可見:
1.== 是根據(jù)物理地址來比較的领斥,也即物理地址是否相同,也就是對象在堆中的地址秉宿,是判斷是不是同一個對象的依據(jù)。
2.Object類的equals方法是使用“==”來比較是否是一個對象屯碴,比較物理地址
//Object類中的equals方法
public boolean equals(Object obj) {
return (this == obj);
}
String內重寫的equals方法是來比較內容是否相同
//String類的equals方法
public boolean equals(Object anObject) { //多態(tài)傳遞參數(shù)
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String aString = (String)anObject; //向下轉為String類型
if (coder() == aString.coder()) {
return isLatin1() ? StringLatin1.equals(value, aString.value)
: StringUTF16.equals(value, aString.value);
}
}
return false;
}
9.字符串的拼接問題
public static void main(String[] args) {
String a = "a";
String b = "b";
String c = a + b;
String d = "ab";
String e = "a" + "b";
System.out.println(System.identityHashCode(c)); //142666848
System.out.println(System.identityHashCode(d)); //1060830840
System.out.println(System.identityHashCode(e)); //1060830840
System.out.println(c == d); //false
System.out.println(e == d); //true
}
1.使用字符串常量+字符串常量 是在字符串常量池中找有沒有存在相應字符串描睦,若存在變量名存儲該地址就好
2.使用字符串變量+字符串常量是創(chuàng)建一個新對象,所以雖然內容相同但是地址會不同
10.Set集合存儲元素唯一的原理
第一步导而、調用hashCode方法忱叭、先判斷hashcode是不是相同,若不同則存入今艺。
第二步韵丑、若相同,再調用equals方法判斷內容是不是相同虚缎,若相同則判斷是同一個元素撵彻。
想要自定義判斷是不是一個元素,可以重寫equals方法和hashCode方法实牡。
11.可變參數(shù):確定了參數(shù)類型碗短,但不知道傳幾個時可以用可變參數(shù)列表
修飾符 返回值類型 方法名(參數(shù)類型... 形參名){ }
等同于:
修飾符 返回值類型 方法名(參數(shù)類型[] 形參名){ }
不用傳遞數(shù)組,直接傳數(shù)據(jù)即可题涨,底層會生成一個數(shù)組來存儲傳遞的數(shù)據(jù)
終極寫法:
修飾符 返回值類型 方法名(Object... 形參名){ }偎谁、多態(tài)、Object類型可以接受任何類型數(shù)據(jù)纲堵。
13.HashSet集合保證了元素的唯一席函,但是卻是無序的鸯隅,其子類LinkedHashSet 中存儲是有序的。
14.Collections工具類的sort靜態(tài)方法。
public static <T> void sort(List<T> list) :將集合中元素按照默認規(guī)則排序蝌以。
可以自己定義排序方式炕舵,在類中實現(xiàn)Comparable<E>接口,重寫compareTo(T o)方法
public class Person implements Comparable<Person>{
private String name;
private int age;
@Override
//返回負整數(shù)跟畅、零或正整數(shù)咽筋,根據(jù)此對象是小于、等于還是大于指定對象徊件。
//按照年齡排序
public int compareTo(Person o) {
// return age-o.getAge(); //增序
return o.getAge()- age; //降序
}
}
public static <T> void sort(List<T> list奸攻,Comparator<? super T> )將集合中元素按照指定規(guī)則排序。
也就是自己用匿名內部類去實現(xiàn)接口中的排序方法
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1; //減序
// return o1-o2; //增序
}
});
16睹耐、Collections工具類的其他靜態(tài)方法
public static <T> boolean addAll(Collection<T> c, T... elements) :
往集合中添加一些元素。
public static void shuffle(List<?> list)
打亂順序 :打亂集合順序部翘。