1. 程式人生 > 資訊 >藍色起源執行長透露:太空航班的定價會超過 100 萬美元

藍色起源執行長透露:太空航班的定價會超過 100 萬美元

集合

集合類:提供一種儲存空間可變的儲存模型

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()使用預設隨機源隨機排列指定列表