Java泛型和Set集合
阿新 • • 發佈:2019-02-08
泛型
- 泛型:標識著集合中儲存元素的資料型別
- 寫法:<資料型別>
- 泛型類宣告位置:類名<泛型>
- 泛型類中建立物件時,會給泛型賦值型別
一個類中有多個泛型,需要在方法上進行泛型宣告,這個泛型將會在該方法被呼叫時被賦值
好處:
1.保證資料的安全性(提示方法中傳入引數型別)
2.避免進行向下轉型(型別強轉)
3.將執行時的錯誤 轉化編譯時報錯建立一個集合帶有泛型
ArrayList<String> list = new ArrayList<String>();
注意:前後泛型的型別要一致或者不填後面的,不填後面的話預設前後一致.
- 泛型 ? extends E 相當於?是E的子類或者本類,可以限定引數的型別(向下限定)
ArrayList<Person> list1 = new ArrayList<>();
list1.add(new Person("東東", 11));
ArrayList<Student> list2 = new ArrayList<>();
list2.add(new Student("西西", 22));
// addAll(Collection ? extends E)
// E list1的泛型
// ? list2的泛型
list1.addAll(list2);
System.out.println(list1);
- 泛型介面,泛型型別在介面的實現類上確定
interface InterA<G>{
public abstract void fun (G g);
}
// 泛型型別可以在介面的實現類上確定
class InterAImpl implements InterA<String>{
@Override
public void fun(String g) {
}
- 建立泛型類的物件
Worker<String > worker = new Worker<>();
- 多引數方法 int …num
1.傳入多個值用逗號隔開
2.直接傳入陣列也行
public static void print(int ... num) {
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
}
注意::多引數要放在方法引數列表的最後一個
- Arrays.asList可以將陣列轉成集合
String[] strings = {"東東","南南","西西"};
List<String> list = Arrays.asList(strings);
System.out.println(list);
注意:該方法轉完集合後,不能對集合進行長度修改.
- 迭代器刪除
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("b");
list.add("b");
// 迭代器刪除
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String str = iterator.next();
if (str.equals("b")) {
// 刪除(使用迭代器的刪除方法)
iterator.remove();
}
}
System.out.println(list);
輸出: a
- For迴圈刪除
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("b");
list.add("b");
// 迴圈刪除 "b"
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals("b")) {
list.remove(i--);
}
}
System.out.println(list);
輸出: a
- Collections.swap集合工具類提供的交換方法
ArrayList<Student> list = new ArrayList<>();
list.add(new Student("東東", 20));
list.add(new Student("西西", 19));
list.add(new Student("北北", 21));
list.add(new Student("南南", 18));
list.add(new Student("中中", 22));
// 氣泡排序法
for (int i = 0; i < list.size()-1; i++) {
for (int j = 0; j < list.size()-1-i; j++) {
// 取出要比較的兩個學生
Student s1 = list.get(j);
Student s2 = list.get(j +1 );
if (s1.getAge() < s2.getAge()) {
// 集合工具類 提供的 交換方法
Collections.swap(list, j, j+1);
}
}
}
System.out.println(list);
Set集合
- 特點:
- 無序
- 無下標
- 不重複(系統每建立一個物件,都會為這個物件分配一個 hashCode值.當向HashSet集合中儲存物件時,系統會先比較HashCode值是否相同.
相同:
會呼叫物件的equals方法進行比較,如果equals方法比較也相同,那麼就不存.
不相同:
如果HashCode不相同,相對於不是一個物件,直接把該物件存入集合中(也不會呼叫equals方法)