關於在集合遍歷中對集合修改問題:
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()方法
對於不是自定義的對象,HashSet會實現自動的去重複,主要依據是重寫了equals()和hashCode()方法, 實現原理:兩個對象再進比較的時候,首先就是比較根據自己的屬性算出的hash值,如何hash值不同,那麼兩個對象肯定不同(),如果hash相同,那麼在進行內容的比較,調用equals()方法,如果二者都相同,則對相同的對象進行覆蓋, 用hash值比較的好處:大大提高的比較的效率, 但是如果要是往集合中添加自定義的類,必須的重寫 equals()和hashCode()方法
關於TreeSet自定義排序規則的問題:
如果是自定義的對象進行排序,必須定義排序規則, 即實現Compareable結構,重寫compareTo()方法
也可以往TreeSet的構造方法中傳入實現Comparator的接口