Collection集合
1.集合:
a)集合是一種容器,用來存儲數據
b)集合的長度不固定,數組的長度固定
c)Java中定義了很多集合類,用於存儲不同數據結構的數據
d)有些數據結構會導致增刪慢,改查快,有些相反
e)Java中集合體系圖
2.Collection集合:
包名:java.util.Collection
單列集合類的根接口,用於存儲一些符合某種規則的元素。
常用方法:
1.增加
a).把給定的元素添加到集合中 public boolean add(E e){}
ArrayList<String> list = new ArrayList<>();
list.add("aaaaa");
2.刪除
刪除集合中的元素
a).清空集合中的所有元素,public void clear() {}
ArrayList<String> list = new ArrayList<>();
list.clear();
b).刪除指定內容 public boolean remove(Object o){}
ArrayList<String> list = new ArrayList<>();
list.remove("ce");
3.判斷
a).判斷集合是否爲空, public boolean isEmpty() {}
ArrayList<String> list = new ArrayList<>();
list.isEmpty();
b).判斷集合中是否包含給定的元素public boolean contains(Object o) {}
ArrayList<String> list = new ArrayList<>();
list.contains("ce");
4.獲取
a)獲取集合中元素的個數,public int size() {}
ArrayList<String> list = new ArrayList<>();
list.size();
b)把集合中的元素,存儲到數組中,public Object[] toArray() {}
ArrayList<String> list = new ArrayList<>();
list.toArray();
Iterator迭代器
Iterator接口,java.util.Iterator
public Iterator iterator() : 獲取集合對應的迭代器,用來遍歷集合中的元素的。
1.Iterator迭代器的使用:
public class CollectionTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("aaaaaa");
//獲得迭代對象
Iterator<String> it = list.iterator();
System.out.println(it.next());
}
}
aaaaaa
2.Iterator接口常用方法:
a).public E next() :返回迭代的下一個元素
b).public boolean hasNext() :如果仍有元素可以迭代,則返回 true。
使用next()方法,當沒有下一個元素的時候,再次調用就會拋出
java.util.NoSuchElementException沒有集合元素的錯誤
所以會配合hasNext()方法使用,當有元素時才獲取下一個元素
1.實現原理
內部採用指針的方式跟蹤集合元素,在沒有調用next()方法之前,指針指向集合之前,當調用方法後,返回集合的第一個元素並且指針向後移動一個元素。
增強for
增強for循環,也叫foreach循環,專門用來遍歷數組和集合中的元素,它的內部原
理其實是個Iterator迭代器,所以在遍歷的過程中,不能對集合中的元素進行增刪操作
1.for-each循環示例:
public static void main(String[] args) {
//定義一個數組
int[] arrInt = {1,2,123,12,44,23,432};
//使用foreach循環遍歷輸出
for (int k:arrInt) {
System.out.println(k);
}
//定義一個集合
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
//遍歷輸出
for (String str:list) {
System.out.println(str);
}
}
泛型
可以在類或方法中預支地使用未知的類型。一般在創建對象時,將未知的類型確定具體的類型。當沒有指定泛型時,默認類型爲Object類型
1.泛型的好處:
a)當存儲不同類型的數據到一個集合中的時候,可以自動檢測錯誤。
b)避免了類型強轉的麻煩
2.泛型的定義與使用:
a)含有泛型的類:
修飾符 class 類名<代表泛型的變量> { }
例如,API中的ArrayList集合:
class ArrayList <E>{
public boolean add(E e){ }
public E get(int index){ }
....
}
E是未知的一種數據類型 未來傳遞什麼就是什麼類型
使用格式:
創建對象的時候確定泛型的類型
2.含有泛型的方法
修飾符 返回值類型 方法名(參數){ }
例如:
public class MyGenericMethod {
public <MVP> void show(MVP mvp) {
System.out.println(mvp.getClass());
}
public <MVP> MVP show2(MVP mvp) {
return mvp;
}
}
使用格式:
調用方法時確定泛型的類型
3.含有泛型的接口:
修飾符 interface接口名<代表泛型的變量> { }
public interface MyGenericInterface<E>{
public abstract void add(E e);
public abstract E getE();
}
使用格式:
1.定義類的時候確定泛型的類型
2.始終不確定泛型的類型,直到創建對象時,確定泛型的類型
4.泛型的通配符:
可以接收具有任何泛型的集合;<?>
1.泛型的上限 <? extends 類名>
參數只能接收,此類或者此類子(孫)類的集合
2.泛型的下限 <? super 類名>
參數只能接收,此類或者此類父(爺)類的集合