藍色起源執行長透露:太空航班的定價會超過 100 萬美元
阿新 • • 發佈:2021-07-21
集合
集合類:提供一種儲存空間可變的儲存模型
Collection
- 多型方式建立
- 具體實現類為ArrayList
package javaee.List; import java.util.ArrayList; import java.util.Collection; public class Collection_demo { public static void main(String[] args) { Collection<String> c = new ArrayList<>(); c.add("java"); c.add("hello"); c.add("world"); c.add("java"); // 該集合中可以有重複元素 System.out.println(c); //輸出 [java, hello, world, java] System.out.println(c.remove("java")); //移除集合中的內容,若有多個則移除第一個元素 //會返回一個布林值 System.out.println(c); // [hello, world, java] System.out.println(c.size()); //返回集合中元素的個數 3 c.clear(); //清空集合中元素 //void型別 } }
迭代器(集合專用遍歷方式)
package javaee.List; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Collection_demo { public static void main(String[] args) { Collection<String> c = new ArrayList<>(); c.add("java"); c.add("hello"); c.add("world"); c.add("java"); //Iterator讀取集合中內容 Iterator<String> t = c.iterator(); while(t.hasNext()) { System.out.println("資料為:"+ t.next()); } } }
list
-
void add(int index , E element) 新增
- 新增內容的索引號不可超過現有集合的個數
-
E remove()
-
E set(int index , E element) 修改指定索引內容
-
E get(int index) 得到指定內容
併發修改異常
如下面的程式碼,看似正常,但是會報一個ConcurrentModificationException的錯誤,這是因為了迭代器獲取元素中判斷預期修改值和實際修改值不一致,想要實現該功能,需要使用for迴圈來做。
//遍歷集合,得到每一個元素,看有沒有"world"這個元素,如果有的話,就新增一個"javaee"元素// Iterator<String> it = list.iterator(); while (it.hasNext()) { String s = it.next(); if(s.equals("world")) { list.add("javaee"); } }
for(int i = 0;i<list.size();i++){
String s = list.get(i);
if(s.equel("world")){
list.add("javaee");
}
}
列表迭代器
通過list集合listIterator()方法得到
可沿任意方向遍歷列表,迭代期間修改列表,並獲取列表中迭代器的當前位置
列表迭代器有add方法,而iterator沒有
ListIterator<String> listl = l1.listIterator();
while(listl.hasNext()) {
String s = listl.next();
if(s.equals("mc")) {
listl.add("qq");
}
}
//列表迭代器中會隨時修改當前的修改次數,所以可以這樣子修改
增強for
內部原理為一個迭代器
list集合子類
ArrayList:底層陣列,查詢快,增刪慢
LinkedList: 底層連結串列,查詢慢,增刪快
set
- 不包含重複元素
- 沒有帶索引方法,不可使用增強for迴圈遍歷
Set<String> set = new HashSet<>();
set.add("hello");
set.add("hello");
set.add("java");
for(String s : set) {
System.out.println(s);
}
雜湊值
- JDK根據物件的地址或字串或數字算出來的int型別的數值
- hashCode()獲取
- 注意 同一個物件多次呼叫hashCode()方法返回的雜湊值是相同的
HashSet
- 底層是雜湊表
- 對迭代出的資料順序不做保證
- 無重複
- 預設初始容量16
HashSet<String> hs = new HashSet<>();
- 在對一個物件進行儲存時,需要重寫它的hashcode和equals方法,以實現雜湊表無重複的特點
雜湊表
按照雜湊值進行排放,雜湊值對儲存容量取餘得到位置,若取餘值相同時,則判斷是否是相同的存放內容
LinkedHashSet
- 由連結串列和雜湊表實現
- 元素有序且唯一
TreeSet
-
元素有序,會以預設方式排序或以TreeSet(Comparator comparator)排序
-
不含重複元素
-
使用Comparator時,需要先在使用的類中實現comparable介面,然後才可以實現comparator方法
++ 返回0表示相同
//在類裡面重寫方法
@Override
public int compareTo(student o) {
// TODO Auto-generated method stub
//return 0;
// 如果都返回0,那麼只能儲存一個,因為它返回0預設後面的物件都一樣
//return 1;
//按輸入的順序輸出,返回一個整數,認為比之前一個大
//return -1;
//逆序
int num = this.age-o.age;
//比較年齡,按照升序
int num1=num==0?this.name.compareTo(o.name):num;
//年齡相同,比較姓名
return num1;
}
Map
鍵值對,Interface Map<K,V> K:鍵的型別 V:值的型別
public class map_demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String, String> mp = new HashMap<String, String>();
mp.put("01", "kik");
mp.put("02", "蘭陵");
mp.put("03", "亞瑟士");
System.out.println(mp);
System.out.println(mp.get("02"));
// mp.containsKey(key);
// mp.containsValue(value);
// 得到是否包含鍵和值
// mp.isEmpty判斷是否為空
}
}
遍歷
//方法一
//獲取所有鍵的集合
Set<String> keyset = mp.keySet();
for(String s : keyset) {
System.out.println(mp.get(s));
}
//方法二
//獲取map
Set<Map.Entry<String, String>> entrySet = mp.entrySet();
for(Map.Entry<String, String> me : entrySet) {
String key = me.getKey();
String value = me.getValue();
System.out.println(key +"++"+value);
}
Collection
Collection.sort()排序
Collection.reverse()反轉
Collection.shuffle()使用預設隨機源隨機排列指定列表