程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 詳解java中的Collections類

詳解java中的Collections類

編輯:關於JAVA

詳解java中的Collections類。本站提示廣大學習愛好者:(詳解java中的Collections類)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解java中的Collections類正文


普通來講教材上的數據構造包含數組、單鏈表、客棧、樹、圖。我這裡所指的數據構造,是一個怎樣表現一個對象的成績,有時刻,單單一個變量聲明不勝年夜用,好比int,String,double乃至一維數組、二維數組沒法完整表達你要表達的器械,而界說一個類Class有太甚費事,這時候候,你可以斟酌一下用Java中的Collections類。應用Collections類,必需在文件頭聲明import java.util.*;

1、靜態、有序、可變年夜小的一維數組Vector與ArrayList 

Collections類外面包含靜態、有序、可變年夜小的一維數組Vector與ArrayList。 

Vector與ArrayList,二者獨一的差異是:vector自帶線程互斥,多個線程對其讀寫會拋出異常,而arraylist則許可多個線程讀寫,其他部門是如出一轍的,換句話說,假如是單線程在讀寫,應用Vector與ArrayList沒有任何差別,但如今編程根本都用ArrayList,應用Vector有點非主流了。
 1、Vector的應用以下:

 public static void Vectortest() {
 // Vector<Double>表現這個vector只能寄存double
 // Vector<String>表現這個vector只能存String
 // 固然Vector<Object> vector=new Vector<Object>();等價於Vector vector=new
 // Vector();然則,eclipse中如許寫會正告,表現你這個Vector不標准,╮(╯▽╰)╭
 Vector<Object> vector = new Vector<Object>();
 vector.add(1.6);
 vector.add(2.06);
 vector.add(1);
 System.out.println("純真的add表現從開頭參加元素:" + vector);
 System.out.println("size()能求出vector的所含元素的個數:" + vector.size());
 vector.remove(1);
 System.out.println("remove(1)表現刪去第1個元素,因為計數從0開端,也就是2.06這個元素:" + vector);
 vector.remove(vector.lastElement());
 System.out.println("刪去最初一個元素的vector為:" + vector);
 vector.add(0, 1.8888);
 System.out.println("在第0個地位參加1.8888這個元素:" + vector);
 vector.set(0, "a");
 System.out.println("把第0個地位這個元素改成a:" + vector);
 }

這段辦法假如在主函數挪用:

System.out.println("======Vector數據構造的測試開端======");
 Vectortest();
System.out.println("======Vector數據構造的測試停止======");

運轉成果以下: 
======Vector數據構造的測試開端======
 純真的add表現從開頭參加元素:[1.6, 2.06, 1]
 size()能求出vector的所含元素的個數:3
 remove(1)表現刪去第1個元素,因為計數從0開端,也就是2.06這個元素:[1.6, 1]
 刪去最初一個元素的vector為:[1.6]
 在第0個地位參加1.8888這個元素:[1.8888, 1.6]
 把第0個地位這個元素改成a:[a, 1.6]
 ======Vector數據構造的測試停止======

2、ArrayList

 public static void ArrayListtest() {
 ArrayList<Double> arraylist = new ArrayList<Double>();
 arraylist.add(1.0);
 arraylist.add(4.0);
 arraylist.add(5.0);
 arraylist.add(2.3);
 System.out.println("純真的add表現從開頭參加元素:" + arraylist);
 System.out.println("size()能求出所含元素的個數:" + arraylist.size());
 arraylist.remove(1);
 System.out.println("remove(1)表現刪去第1個元素,因為計數從0開端,也就是4這個元素:" + arraylist);
 arraylist.remove(arraylist.size() - 1);
 System.out.println("刪去最初一個元素的arraylist為:" + arraylist);
 arraylist.add(0, 1.8888);
 System.out.println("在第0個地位參加1.8888這個元素:" + arraylist);
 arraylist.set(0, 9.0);
 System.out.println("把第0個地位這個元素改成a:" + arraylist);
 Collections.sort(arraylist);
 System.out.println("假如arraylist不是籠統類型,則支撐排序" + arraylist);

 }

 這裡可以看到ArrayList刪除最初一個元素的方法與Vector有所分歧,重要是ArrayList沒有lastElement()這個辦法來掏出最初一個元素remove()失落,只能用arraylist.size() - 1來肯定最初一個元素的地位。假如在主函數如許挪用這段辦法: 

 System.out.println("======ArrayList數據構造的測試開端======");
 ArrayListtest();
 System.out.println("======ArrayList數據構造的測試停止======");

 則獲得以下的運轉成果: 
======ArrayList數據構造的測試開端======
 純真的add表現從開頭參加元素:[1.0, 4.0, 5.0, 2.3]
 size()能求出所含元素的個數:4
 remove(1)表現刪去第1個元素,因為計數從0開端,也就是4這個元素:[1.0, 5.0, 2.3]
 刪去最初一個元素的arraylist為:[1.0, 5.0]
 在第0個地位參加1.8888這個元素:[1.8888, 1.0, 5.0]
 把第0個地位這個元素改成a:[9.0, 1.0, 5.0]
 假如arraylist不是籠統類型,則支撐排序[1.0, 5.0, 9.0]
 ======ArrayList數據構造的測試停止====== 

從下面的兩個例子,可以看到Vector與ArrayList比一個通俗的數組,也就是教材上所教的一維數組int array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 7 };壯大許多,可以在隨意率性地位拔出元素,也能夠不消遍歷數組就可以夠用一個辦法刪除指定地位的元素,固然為你測驗你照樣要曉得這個數組是怎樣遍歷的。其實,ArrayList與通俗的一維數組完整可以完成互轉,並且應用ArrayList還可以或許直接對array停止排序,而不消再對array寫一個冒泡排序之類的,直接用Collections.sort();就可以夠排序數組,然後再用Collections.reverse();就可以完成逆排序,固然照樣那句,為你測驗你照樣要曉得這個數組是怎樣排序的。

好比以下的辦法,完成了對一維數組int array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 7 };的排序與逆排序,先把數組轉化成ArrayList再用Collections.sort();與Collections.reverse();排序,最初再把ArrayList內容轉化回一維數組: 

 public static void arrayListSort() {
 int array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 7 };
 ArrayList<Integer> arraylist = new ArrayList<Integer>();
 for (int i = 0; i < array.length; i++)
 System.out.print(array[i] + ",");
 for (int i = 0; i < array.length; i++)
 arraylist.add(array[i]);
 Collections.sort(arraylist);
 for (int i = 0; i < array.length; i++)
 array[i] = arraylist.get(i);
 System.out.print("排序後的數組:");
 for (int i = 0; i < array.length; i++)
 System.out.print(array[i] + ",");
 Collections.reverse(arraylist);
 for (int i = 0; i < array.length; i++)
 array[i] = arraylist.get(i);
 System.out.print("逆排序後的數組:");
 for (int i = 0; i < array.length; i++)
 System.out.print(array[i] + ",");
 //排序以後把arraylist燒毀
 arraylist = null;
 //這句是建議Java立時收受接管渣滓,固然這句有無都行,Java在運轉的進程中會主動消除渣滓的
 System.gc();

 }

  在主函數中如許挪用辦法: 

 System.out.println("======Java數組排序開端======");
 arrayListSort();
 System.out.println("======Java數組排序停止======");

就可以夠獲得以下的運轉成果: 
======Java數組排序開端======
 8,7,100,88,6,4,5,33,7,排序後的數組:4,5,6,7,7,8,33,88,100,逆排序後的數組:100,88,33,8,7,7,6,5,4, 
======Java數組排序停止====== 
別的,之前說的《Java中List的應用辦法簡略引見》(點擊翻開鏈接)也是異樣的事理 

2、聚集HashSet 
別的,還有聚集HashSet,HashSet與數學上的聚集概念如出一轍。由一個或多個元素所組成的叫做聚集。HashSet具有:
1.肯定性,聚集中的元素必需是肯定的,這個是空話,必需肯定,豈非我還可以在外面放一個不肯定的器械出來嗎? 
2.互異性,聚集中的元素互不雷同。例如:聚集A={1,a},則a不克不及等於1,也就是假如你把兩個1放進HashSet會主動變成一個1 
3.無序性,聚集中的元素沒有前後之分。是以HashSet也不得停止排序操作 
例如以下的一段辦法: 

 public static void HashSettest() {
 HashSet<Object> hashset = new HashSet<Object>();
 hashset.add(1);
 hashset.add(1);
 hashset.add(5);
 hashset.add(2.3);
 System.out.println("純真的add表現從開頭參加元素:" + hashset);
 System.out.println("size()能求出所含元素的個數:" + hashset.size());
 hashset.remove(1);
 System.out.println("remove(1)表現刪去'1'這個元素:" + hashset);
 hashset.remove("asd");
 System.out.println("假如沒有'asd'這個元素則remove甚麼都不做:" + hashset);
 hashset.add(1.8888);
 System.out.println("參加1.8888這個元素:" + hashset);
 }

在主函數中,挪用這個辦法:

 System.out.println("======HashSet數據構造的測試開端======");
 HashSettest();
 System.out.println("======HashSet數據構造的測試停止======"); 

成果以下: 
======HashSet數據構造的測試開端======
 純真的add表現從開頭參加元素:[1, 5, 2.3]
 size()能求出所含元素的個數:3
 remove(1)表現刪去'1'這個元素:[5, 2.3]
 假如沒有'asd'這個元素則remove甚麼都不做:[5, 2.3]
 參加1.8888這個元素:[5, 1.8888, 2.3]
 ======HashSet數據構造的測試停止======
 HashSet有add()辦法與remove()辦法,add()所加的元素沒有次序,每次用System.out.println()打印的成果能夠次序紛歧樣,也不克不及向下面Vector與ArrayList一樣,只需所存的元素不是Object,就可以應用Collections.sort(arraylist);來排序 

3、二元組HashMap
這裡的應用辦法和下面的數據根本雷同,也很簡略,就是put辦法來對象出來map,而get可以或許取走map中的對象,然則試圖把二元組HashMap用成三元組是毛病的,假如一個對象中含有元素過量,那你應當斟酌用類。而不是還在留戀Java中介乎於通俗變量與Class類之間的Collections類。
好比以下辦法就展現了試圖把HashMap改成三元組的毛病操作: 

 public static void Maptest(){
 System.out.println("======Map毛病的應用開端======");
 HashMap<String,String> map=new HashMap<String, String>();
 HashMap<String,HashMap<String, String>> bigmap=new HashMap<String, HashMap<String, String>>();
 map.put("key1","1");
 map.put("key2","2"); 
 bigmap.put("test1",map);
 map.clear();
 map.put("key1","3");
 map.put("key2","4"); 
 bigmap.put("test2",map);
 System.out.println(bigmap);
 System.out.println(bigmap.get("test1").get("key1"));
 System.out.println(bigmap.get("test1").get("key2"));
 System.out.println(bigmap.get("test2").get("key1"));
 System.out.println(bigmap.get("test2").get("key2"));
 System.out.println("======Map毛病的應用停止======");
 System.out.println("======Map准確的應用開端======");
 map.clear();
 bigmap=null;
 map.put("key1","1");
 map.put("key2","2");
 map.put("key3","3");
 System.out.println(map);
 System.out.println("======Map准確的應用停止======");
 }

在主函數挪用這段代碼,獲得上面的運轉成果: 
======Map數據構造的測試開端======
 ======Map毛病的應用開端======
 {test1={key2=4, key1=3}, test2={key2=4, key1=3}}
 3
 4
 3
 4
 ======Map毛病的應用停止======
 ======Map准確的應用開端======
 {key3=3, key2=2, key1=1}
 ======Map准確的應用停止======
 ======Map數據構造的測試停止======
這段法式原來意圖是很顯著,試圖結構出一個{test1,key1,1},{test1,key2,2},{test2,key3,3},{test2,key4,4} 
但是,每一個bigmap中照樣存得都是誰人map,你一旦把map清空,本來test1中的誰人map也異樣被清空, 有人試圖發明多個map1,map2,...那你還不如用一個簡略的類,看起來加倍明白,並且類中今後還能寫辦法,被繼續 

4、備注
 在發明一個新的Vector,Arraylist好,HashSet也好,HashMap也好,完整可以寫成:
 Collection<String> a= new ArrayList<String>();
List<String> a= new Vector<String>();之類
 由於繼續於Collection接口的有ArrayList、Vector、Linkedlist、HashSet、TreeSet,繼續於MAP接口的有HashMap、Hashtable,這是Java中類的繼續、多態、封裝之類的成績,固然為了你的錯誤看得加倍清楚,這裡就不要玩甚麼花梢定名了,寫一個清晰的ArrayList<Integer> arraylist = new ArrayList<Integer>();沒人敢說你不懂Java中的類。

 以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved