1.Collection 集合包括 list 和 set 集合
2. list集合:子類 ArrayList 底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢,線程不安全,效率高
LinkedList 底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢慢,增刪快,線程不安全,效率高
特有功能:void addFirst() void addLast()等等
Vector 底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢,線程安全,效率低,但一般不用
注意:list集合的 void add(int index,E element):在指定位置添加元素
E set(int index,E element) :在指定位置修改元素,返回被修改的元素
3. list集合特有功能:ListIterator<E> listIterator(); 此迭代器特有功能:boolean hasprevious(); E PRevious();可以實現(xiàn)集合的逆向遍歷,但必須先正向遍歷
//List集合遍歷并修改元素 List<String> list=new ArrayList<String>(); //添加元素 list.add("Hello"); list.add("world"); list.add("java"); //注意不能迭代器遍歷,集合修改元素,否則會發(fā)生并發(fā)修改異常ConcurrentModificationException //遍歷集合 1.迭代器遍歷,迭代器修改元素 ListIterator<String> ls=list.listIterator(); while(ls.hasNext()){ if(ls.next().equals("world")){ ls.set("c++"); } } System.out.println(list);//[Hello, c++, java] //2.集合遍歷,集合修改 for(int x=0;x<list.size();x++){ if(list.get(x).equals("world")){ list.set(1,"c++"); } } System.out.println(list);//[Hello, c++, java] 4. 將一個數(shù)組轉(zhuǎn)成一個list集合/*把數(shù)組轉(zhuǎn)換成集合 * String> List<String> java.util.Arrays.asList(String... arg0) * 注意事項:可以把集合轉(zhuǎn)換成數(shù)組,但必須注意數(shù)組的長度不能改變, * (String... arg0) 本質(zhì)是數(shù)組 List<String> list1 =Arrays.asList("Hello","java","123"); //list1.add("javaee");//UnsupportedOperationException //list1.remove(1);//UnsupportedOperationException list1.set(1, "world"); for(String s:list1){ System.out.println(s); }5. set集合和list集合的區(qū)別set集合元素是唯一的,同時是無序的(即元素存儲和遍歷的時候,順序可能不一樣)
list集合元素可以重復(fù),是有序的(即元素存儲和遍歷順序一樣)
6. set集合 :子類 hashSet 底層數(shù)據(jù)結(jié)構(gòu)是哈希表,保證元素唯一性
LinkedHashset底層數(shù)據(jù)結(jié)構(gòu)是哈希表和鏈表,鏈表保證元素有序(即元素存儲和遍歷順序一樣)
TreeSet 底層數(shù)據(jù)結(jié)構(gòu)是二叉樹結(jié)構(gòu)(紅黑樹是一種自平衡的二叉樹結(jié)構(gòu)),并且能夠按照某種規(guī)則對元素進行排序
set集合的唯一性是依賴于hashCode()和equals()方法
7.TreeSet
A:自然排序 自定義對象的時候必須實現(xiàn)Comparable接口 存儲:第一個為根節(jié)點 ,之后的元素按照(通過底層的Comparable()方法,大的(即返回值為正數(shù))排在根節(jié)點的右邊,小的(即返回值為負的)排在根節(jié)點的左邊); 遍歷:從根節(jié)點開始,按照左中右的順序依次遍歷 B:比較器排序 new TreeSet(Comparator<? super E> comparator) ; Comparator 是個接口,實際上要的是一個該接口的子類對象 所以一般用匿名內(nèi)部類
新聞熱點
疑難解答