集合知識總結(1)

關於在集合遍歷中對集合修改問題:

package org.Collections;



import java.util.*;

public class removeExceptionTest {

	public static void main(String[] args) {
		

	}
	public static void test1(){
		/*
		 *List 兩個子類的比較:
		 *ArrayList和LinkList
		 *ArrayList 底層的數據結構式數組,方面進行查詢操作,增刪效率低
		 *LinkedList 底層數據結構式鏈表,方面進行增刪,查詢效率低
		 *
		 *  關於標準方式(Iterator)進行遍歷集合操作集合中的元素:
		 *  如果在遍歷的同時由集合的實例向集合中增刪改查的時候,就會拋出
		 *  java.util.ConcurrentModificationException異常
		 *  此時如果想要在遍歷的時候就行集合的增刪改查的操作,只能用Iterator實例的方法
		 *  但是Iterator實例的方法只有刪除的操作,所以真正用於遍歷時對集合進行操作的的迭代器是Iterator
		 *  的子類ListIterator實例的方法,此方法中有CRUD的各種方法,而且還能實現集合的反正方向的輸出
		 *  
		 *  
		 *
		 *
		 * 
		 */
		List<String> list = new LinkedList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("c");
		list.add("c");
		list.add("d");
		list.add("e");
		list.add("f");
		list.add("g");
		list.add("h");
		ListIterator<String> iterator = list.listIterator();
		// 需求1:爲集合中每個元素後面添加一個字符串"i"
		while (iterator.hasNext()) {
			iterator.next();
			iterator.add("i");
		}
		System.out.println(list);//
	}

}


集合如何去重複元素:

		/*
		 * 關於如何去一次性掉list集合中的重複元素:
		 * 可以往set集合中加入list集合,
		 */
		List<String> list=new ArrayList<String>();
		list.add("b");
		list.add("b");
		list.add("a");
		list.add("a");
		list.add("c");
		list.add("d");
		list.add("d");
		System.out.println(list);//打印結果:[b, b, a, a, c, d, d]
		
		Set<String> set1=new HashSet<String>();
		set1.addAll(list);
		//運用HashSet集合的addAll()方法把List中的重複元素去掉,但是無序
		System.out.println(set1);//打印結果:[d, b, c, a]
		Set<String> set2=new LinkedHashSet<String>();
		set2.addAll(list);
		//運用LinkedHashSet集合的addAll()方法把List中的重複元素去掉,有序
		System.out.println(set2);// 打印結果:[b, a, c, d]

關於數組變成的集合:

		/*
		 * 把數組變成集合後的問題:
		 * 雖然把數組變成了集合,但是並不能對此集合進行增刪操作
		 * 只能進行查詢操作,爲什麼呢?
		 * 此集合底層實現的是數組,不是真正意義的集合只能進行查詢,無法進行增刪操作
		 * 
		 */
		String[] arrays={"a","b","c","d","e"};
		List<String> list= Arrays.asList(arrays);
		list.add("f");//拋出異常 java.lang.UnsupportedOperationException
		list.remove(1);//拋出異常 java.lang.UnsupportedOperationException
		System.out.println(list.contains("a"));// 輸出結果爲true
		System.out.println(list);

 關於HashSet去重複問題:

關於HashSet去重複問題:
 對於不是自定義的對象,HashSet會實現自動的去重複,主要依據是重寫了equals()和hashCode()方法, 實現原理:兩個對象再進比較的時候,首先就是比較根據自己的屬性算出的hash值,如何hash值不同,那麼兩個對象肯定不同(),如果hash相同,那麼在進行內容的比較,調用equals()方法,如果二者都相同,則對相同的對象進行覆蓋, 用hash值比較的好處:大大提高的比較的效率, 但是如果要是往集合中添加自定義的類,必須的重寫 equals()和hashCode()方法



關於TreeSet自定義排序規則的問題:

如果是自定義的對象進行排序,必須定義排序規則, 即實現Compareable結構,重寫compareTo()方法
也可以往TreeSet的構造方法中傳入實現Comparator的接口



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章