爲什麼要使用集合?
儲存數據的容器有:變量,數組,數據庫
內存:變量(單一的空間)數組(多個連續的空間,有下表,訪問數據比較快,但是數組長度固定,只能儲存同一類型,增刪非常麻煩)
外部:數據庫(大量,易於管理)
集合:
* 什麼是集合?
* 集合是java中一個存儲數據的容器
* 在java中集合這種容器有很多種,將這些容器所具備的共性的內容不斷的向上抽取,就形成了一個集合體系
* 集合體系的頂層就是Collection
* 詳細就看圖
- 怎麼去創建集合?
- 1.Collection interface
- 不能直接創建Collection的實例
- 特點 : 一些 集合 允許有重複的元素,而另一些則不允許。
- 一些 集合 是有序的,而另一些則是無序的。
實現集合也就是其子類 Map list set 三大類
List 有序 重複元素的集合 list接口下的集合都有索引
//向指定下表添加元素
* 添加
* add(int index, E element) 向指定的下標添加元素
* addAll(int index, Collection<? extends E> c) 向指定的下標添加另一個集合
*
* 獲取
* get(int index) 獲取指定下標的元素
* 和String類似
* indexOf(Object o)
* lastIndexOf(Object o)
* subList(int fromIndex, int toIndex)
*
* 迭代器
1.同樣不能通過增強for來修改集合
for (Object object : list) {
//注意 : 在迭代集合的同時,不能通過集合來修改本身的內容
if("fff".equals(object)){
list.add("ggg");//同樣會拋出異常
}
}
2. ListIterator li= list.listiterator();
while(li.hasNext())
if(li.next.equals("fff")){
li.add("ggg"); //通過拿到listiterator 通過迭代器本身來對集合進行修改,就不會產生異常
}
}
* 刪除
* remove(int index) 刪除指定下標的元素
* 修改
* set(int index, E element) 修改指定下標的元素
*
list 可以分爲ArrayList , LinkedList
ArrayList 數組結構 不同步,線程不安全的集合,效率比較高 儲存的數據不唯一,但是有序(插入順序)便於查找
爲什麼ArrayList是使用的較多的集合? 查詢的操作比增刪要多
LinkedList 鏈表結構的集合
* 對集合開頭結尾的操作的方法
* addFirst(Object o); 插入開頭的方法
* addLast(Object o); 插入結尾的方法
*
System.out.println(list.removeLast()); //刪除並返回最後一個元素的內容
System.out.println(list.removeFirst()); //刪除並返回第一個元素的內容
//也就類似於查找集合中的元素
System.out.println(list.getFirst()); //直接返回第一個元素
System.out.println(list.getLast()); //直接返回最後一個元素
//創建集合容器
Collection c = new ArrayList();
Collection c1 = new ArrayList();
添加:
add(Object e)
addAll(Collection c)
c.add("c1中的內容1");
c.add("c1中的內容2");
c.add("c1中的內容3");
//創建addAll()
c.addAll(c1);
判斷:
//contains(Object o) 包含
System.out.println(c.contains("asd"));
System.out.println(c.contains(new Student("張三",12)));
//containsAll(Collection<?> c)
System.out.println(c.containsAll(c1));
//判斷集合裏面是否爲空
isEmpty()
刪除
remove(Object o) 刪除指定元素
System.out.println("remove : " + c.remove("asd")); //代表刪除成功 返回true
removeAll(Collection<?> c)刪除闡述集合c中的全部內容
System.out.println("removeAll : " + c.removeAll(c1));
System.out.println(c);
retainAll(Collection<?> c) 保留參數集合c中的全部內容
System.out.println("retainAll : " + c.retainAll(c1));
System.out.println(c);
clear()清空集合中的所有內容
c.clear();
System.out.println(c);
* 其他:
*
* iterator() ***** 迭代器 用於獲取集合中的元素
* 獲取迭代器
Iterator it = c.iterator();
//遍歷元素 取出元素的時候,如果存儲的時候數據類型不一致,就很有可能出現 ClassCastException 類型轉換異常 ,泛型的技術來解決這個問題
//System.out.println(it.hasNext());//判斷有沒有下一個元素
//System.out.println(it.next());;//返回下一個元素 拋出一個異常 NoSuchElementException 沒有元素
while(it.hasNext()){
System.out.println(it.next());
}
* size()
獲取集合中元素的個數
System.out.println(c.size());
toArray()
toArray() 將集合轉換成Object類型數據
Object[] arr = c.toArray();