Java SE——Collection介面與其子介面
阿新 • • 發佈:2019-02-11
一、Collection介面1、Collection的介面定義:public interface Collection<E> extends Iterable<E> List介面與Set介面1.List集合介面(1)List介面的方法: 1)get(int indeks):根據索引取得儲存資料
1)ArrayList子類
a)歷史時間:ArrayList是從JDK1.2提供的,而Vector是從JDK1.0就提供了。
b)處理形式:ArrayList是非同步處理,效能更高;Vector是同步處理,效能較低。c)資料安全:ArrayList是非執行緒安全;Vector是效能安全。
d)輸出形式:ArrayList支援Iterator、ListIterator、foreach;Vector支援Iterator、ListIterator、foreach、Enumeration。
3)LinkedList子類
a)觀察ArrayList原始碼,可以發現ArrayList裡面存放的是一個數組,如果例項化此類物件時傳入了陣列大小,則裡面儲存的陣列就會開闢一個定長的陣列,但是後面再進行資料儲存的時候發現數組個數不夠了會進行陣列動態擴充。
c)LinkedList:是一個純粹的連結串列實現,與之前編寫的連結串列程式的實現基本一樣(人家效能高)。
(2)TreeSet(預設升序排序) a)有序儲存,不允許為null
2、Collection介面的方法
(1)add(E e):向集合中新增資料(2)addAll(Collection <? extends E> c):向集合中新增一組資料(3)clear():清空集合資料(4)contains(Object obj):查詢資料是否存在,需要使用equals()方法(5)remove(Object obj):刪除資料,需要equals()方法(6)size():取得集合長度(7)toArray():將集合變為物件陣列返回(8)iterator():取得Iterator介面物件,用於集合輸出二、Collection介面的子介面Collection介面有兩個子介面:2)set(int indeks,E element):修改資料
(2)List下常用子類1)ArrayList子類
2)Vector子類import java.util.ArrayList; import java.util.List; public class Test1 { public static void main(String[] args) { List<String> list = new ArrayList<>(); System.out.println(list.size()+"、"+list.isEmpty()); list.add("Hello"); list.add("World"); //資料內容可以重複 list.add("Hello"); System.out.println(list); System.out.println(list.size()+"、"+list.isEmpty()); list.remove("Hello"); System.out.println(list); System.out.println(list.remove("World"));//返回true或者false,表示是否刪除成功 System.out.println(list.remove("World"));//返回true或者false,表示是否刪除成功 System.out.println(list.contains("ABC"));//返回true或者false,表示元素是否包含 System.out.println(list.contains("World"));//返回true或者false,表示元素是否包含 System.out.println(list); //取得資料要使用get()方法來取得 for(int i = 0;i < list.size();i++) { System.out.println(list.get(i)); } } }
注:ArrayList與Vector區別:import java.util.List; import java.util.Vector; import javax.print.attribute.standard.MediaName; public class Test1 { public static void main(String[] args) { List<String> list = new Vector<>(); list.add("Hello"); list.add("World"); list.add("LaLa"); System.out.println(list); list.remove("Hello"); System.out.println(list); } }
a)歷史時間:ArrayList是從JDK1.2提供的,而Vector是從JDK1.0就提供了。
b)處理形式:ArrayList是非同步處理,效能更高;Vector是同步處理,效能較低。c)資料安全:ArrayList是非執行緒安全;Vector是效能安全。
d)輸出形式:ArrayList支援Iterator、ListIterator、foreach;Vector支援Iterator、ListIterator、foreach、Enumeration。
3)LinkedList子類
import java.util.LinkedList;
import java.util.List;
public class Test1
{
public static void main(String[] args) {
List<String> list = new LinkedList<>();
list.add("Hello");
list.add("World");
list.add("LaLa");
System.out.println(list);
list.remove("Hello");
System.out.println(list);
}
}
注:ArrayList與LinkedList區別a)觀察ArrayList原始碼,可以發現ArrayList裡面存放的是一個數組,如果例項化此類物件時傳入了陣列大小,則裡面儲存的陣列就會開闢一個定長的陣列,但是後面再進行資料儲存的時候發現數組個數不夠了會進行陣列動態擴充。
c)LinkedList:是一個純粹的連結串列實現,與之前編寫的連結串列程式的實現基本一樣(人家效能高)。
ArrayList封裝的是陣列;LinkedList封裝的是連結串列。ArrayList時間複雜度為1,而LinkedList的複雜度為n。
2.Set集合介面Set子介面中有兩個常用子類:HashSet(無序儲存)、TreeSet(有序儲存)
(1)HashSet a)HashSet為無序儲存,允許插入元素為null(set.add(null)),但有且只能有一個為nullimport java.util.HashSet; import java.util.Set; public class Test1 { public static void main(String[] args) { Set<String> set = new HashSet<>(); set.add("Hello"); set.add("World"); set.add("LaLa"); set.add(null); System.out.println(set); } } b)判斷是否重複,要覆寫Object中的hashCode()以及equals()方法import java.util.HashSet; import java.util.Set; class Person implements Comparable<Person> { private String name; private Integer age; @Override public String toString() { // TODO Auto-generated method stub return "name: "+name + " age: "+age; } @Override public boolean equals(Object obj) { // TODO Auto-generated method stub if(this == obj) { return true; } if(obj == null || getClass() != obj.getClass()) { return false; } Person person = (Person) obj; return Object.equals(name,person.name) && Object.equals(age,person.age); } @Override public int compareTo(Person o) { // TODO Auto-generated method stub if(this.age > o.age) { return 1; } else if(this.age < o.age) { return -1; } else { return this.name.compareTo(o.name); } } public Person(String name,Integer age) { // TODO Auto-generated constructor stub this.name = name; this.age =age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } public class Test1 { public static void main(String[] args) { Set<Person> set = new HashSet<>(); set.add(new Person("lxx",19)); set.add(new Person("lxy",20)); set.add(new Person("lww",10)); System.out.println(set); } }
(2)TreeSet(預設升序排序) a)有序儲存,不允許為null
import java.util.Set;
import java.util.TreeSet;
public class Test1
{
public static void main(String[] args) {
Set<String> set = new TreeSet<>();
set.add("C");
set.add("D");
set.add("E");
set.add("A");
System.out.println(set);//升序排序[A,C,D,E]
}
}
b)要想使用自定義類作為TreeSet儲存該類必須覆寫Compareable介面 Compareable: int compareTo(Object obj) 若返回值>0:當前物件>比較物件 若返回值=0:當前物件=比較物件 若返回值<0:當前物件<比較物件 類中所有屬性都要參與運算import java.util.Set;
import java.util.TreeSet;
class Person implements Comparable<Person>
{
private String name;
private Integer age;
@Override
public String toString() {
// TODO Auto-generated method stub
return "name:"+name+" age:"+age;
}
@Override
public int compareTo(Person o) {
// TODO Auto-generated method stub
if(this.age > o.age)
{
return 1;
}
else if(this.age < o.age)
{
return -1;
}
else {
return this.name.compareTo(o.name);
}
}
public Person(String name,Integer age) {
// TODO Auto-generated constructor stub
this.age = age;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
public class Test1
{
public static void main(String[] args) {
Set<Person> set = new TreeSet<>();
set.add(new Person("lxy", 18));
set.add(new Person("lww", 28));
set.add(new Person("lww", 28));//有重複元素,只打印一次
set.add(new Person("llh", 25));
System.out.println(set);
}
}