2020年7月9日22:20:42 java基礎整理

weixin_46093422發表於2020-11-18

介面List:有序的集合(有序就是指的是怎麼儲存的,就怎麼拿出來)有索引,可儲存重複的元素(set是不允許儲存重複的元素)
List介面派系,繼承的是Collection介面,
下面有很多的實現類,
List介面的特點:有序,索引,可以重複元素
實現類,ArrayList,LinkedList
List介面中的抽象方法,有一部分方法和他父類Collection的方法是一樣的
List介面有自己特有的方法,帶有索引的功能

	add(int index,E):將元素插入到列表的指定索引上
	帶有索引的操作,防止越界的問題
		程式碼實現:
		public static void function(){
		List<String> list = new ArrayList<String>();
		list.add("a1");
		list.add("a2");
		list.add("a3");
		System.out.println(list);
		list.add(2,"itch");
		System.out.println(list);
	}
		異常:IndexOutOfBoundsException:集合越界異常
	     ArrayIndexOutOfBoundsException:陣列越界異常
	     StringIndexOutOfBoundsException:字串越界異常
E remove(int index):移除指定索引上的元素(其中索引是不能寫錯的)
						返回被刪除之前的元素
		E set(int index,E):修改指定索引上的元素
								返回被修改之前的元素
	這個很有可能是面試題,就是可能讓你去寫,但是這個就是沒有結果的,這是異常的
		public static void function(){
		List<String> list = new ArrayList<String>();
		list.add("a1");
		list.add("a2");
		list.add("a3");
		Iterator<String> i = list.iterator();
		while(i.hasNext()){
			String s = i.next();
			if(s.equals("a3")){//只有基本型別用的是==,引用型別用的是equals
				list.add("A3");//ConcurrentModificationException:這個是迭代器的併發修改異常,就是在遍歷的過程中,使用了集合方法修改了集合的長度是不允許的
			}
			System.out.println(s);
		}
		
	}
		
							
	堆疊:先進後出
	佇列:先進先出
	陣列:查詢元素快(通過索引可以快速的去查詢指定位置的元素)陣列的中的每個地址的位置都是連續的
		弱點:就是增刪慢 陣列的最大的用途就是查詢
	連結串列:就是存進去一個陣列,然後讓這個陣列去記住前面一個陣列的地址,缺點:查詢慢,優點:增刪快
	 		其中陣列的用的是最多的,因為我們做的專案最多的就是查詢,這個陣列是佔有優勢的
ArrayList:(執行緒是不安全的)這是一個可變長度的陣列,就是如果我們用的是空參去設定的話,預設的長度就是10,同時我們自己也是可以去指定的,但是因為他是可變的我們是沒有必要去指定的
	特性:這個儲存的結構是陣列結構,元素的增刪慢查詢快,由於我們日常開發中使用最多功能是查詢資料,遍歷資料,所以ArrayList是常用的集合。
LinkedList:(執行緒是不安全的)這是個單向列表,增刪快,查詢慢,提供了大量的首尾操作方法,
	LinkedList子類的特有功能(如果是子類特有功能就是不能使用多型呼叫,所以使用linkedlist子類特有功能的時候不能使用的是多型)
	addFrist(E):t新增到連結串列的開頭
	addLast(E):新增連結串列的結尾
	getFirst():獲取連結串列的開頭
	getLast():獲取連結串列的結尾
		注:這個會有獲取的異常,就是如果集合裡面沒有元素,他就會產生異常
		所以就是要判斷一下的:if(!link.isEmpty(){
			String first =link.getFirst();
			String last = link.getLast();
		}
	E removeFirst():移除並返回列表的開頭
	E removeLast():移除並返回列表的結尾
	
set:集合就是無序的,不重複的元素,學會hashset就是會map(set的底層本質就是map)
	只能通過迭代和增強for去獲取,是無序的,就是你存進去是什麼樣子,取出來不一定是原來的樣子,裡面可以是null的元素。
	set介面的特點:不重複元素,沒有索引,
		set的介面的實現類是hashSet(雜湊表)
		特點:無序集合,就是儲存和取出是不同的,沒有索引,也不儲存重複元素,
		程式碼的編寫和ArrayList是完全一致的
		程式碼:
			public static void main(String[] args){
			Set<String> set= new HashSet<String>();
			set.add("dn");
			set.add("cn");
			set.add("wo");
			//遍歷  迭代
			Iterator<String> it = set.iterator();
			while(it.hasNext()){
				System.out.println(it.next());
			}
			//增強for
			for(String s:set){
				System.out.println(s);
			}
			HashSet集合自身特點:
				底層資料結構是雜湊表
				儲存取出都比較快
				執行緒不安全,執行速度比較快
				hashset初始容量是16,其實我們一般是不需要去動的,不要將初始容量設定的太高,或者是將載入因子設定的太低,(載入因子就是陣列的長度(16*載入因子就是裡面放的表格的個數)如果超過這個個數就是會擴容的,要是沒要超過的話,就是遍歷)所以就是0.75是個比較折中的演算法,既可以達到查詢的快又可以節省資源,陣列擴容是一個非常浪費資源的過程,就是複製,所以很麻煩再雜湊(rehash)
	物件的hash值,普通的十進位制整數
	父類Object,方法public int hashCode()計算結果int整數
	 */
	public static void function(){
	String s1=new String("abc");
	String s2=new String("abc");
	System.out.println(s1);//abc
	System.out.println(s2);//abc
	}
	

相關文章