這是我第一次寫博客,學習java之路相經過寫博客記錄下來,若是描述有錯誤,請多多指導!java
1.1 集合的演變安全
早期java中只有3個集合類,分別爲Vector類,Hashtable類和Stack類。這3個類提供了基本的集合功能,但並不使人徹底滿意。該方案沒有足夠的靈活性讓咱們實現多種狀況的功能,全部方法都是同步方法,用於保證線程安全性,但這也形成了性能損失。多線程
但Java5後出現了另一個重大的變化,新增特性甚至改變了集合類的使用語法。ide
java5以前,集合中中沒法直接添加基本類型值,例如,添加int值時必須先將其封裝在相應Integer包裝器的實例中。不過。自從java5引入名爲 自動拆箱/裝箱的特性,咱們並不須要手動封裝在相應的Integer包裝器的實例中,由IDE自動爲咱們完成,咱們並不會看到該過程。性能
Map map=new HashMap(); //java1.5以前,添加int值必須先將其封裝在相應的Integer包裝器的實例中 map.put("one", new Integer(1)); //自動爲咱們裝箱 map.put("two", 1);
1.2 集合類與接口學習
添加到集合中的對象稱爲元素(element),一些集合類容許存在重複元素,而一些事不容許的。這裏的重複是指用equals()方法比較2個元素,若是返回值爲true,則重複,不然相反。spa
1.21 Collection線程
集合類層次結構的最頂端是Collection接口,大部分集合類實現常常用到該接口中的方法。orm
若是想訪問集合元素,可經過iterator()方法訪問,並指出該方法返回的對象實現了Iterator接口,也就是iterator()方法返回一個Iterator對象,使用該對象提供的方法咱們就能依次讀取對象中的集合。
對象
List<Student> list=new ArrayList<Student>(); Student student1=new Student(); student1.setStuName("小瀚"); student1.setStuAge(20); Student student2=new Student(); student2.setStuName("小瀚"); student2.setStuAge(20); list.add(student1); list.add(student2); //獲得當前Iterator對象 Iterator<Student> it=list.iterator(); //提示迭代器是否已經返回集合中全部對象的引用 while(it.hasNext()){ //返回指向集合中下一個對象的應用 Student stu=it.next(); System.out.println(stu.getStuName()+" "+stu.getStuAge()); }
1.22 List
集合類的其中一個特色是對集合中元素進行有意義的排序,List接口定義了這種排序,也就是說,若是使用List實現並檢索元素的引用,那麼返回元素的順序是能夠預訂的,該順序是是由元素在集合中的位置決定的,而且在添加元素的時候能夠顯示或隱式地指定元素位置。下面我使用以下代碼來演示下
List<Student>stuList=new ArrayList<Student>(); stuList.add(new Student(123,"小瀚",22)); stuList.add(new Student(456,"小露",22));
代碼中姓名爲 小瀚 的對象佔用列表的第一個位置,也就是索引0,而 小露 對象佔用第二個位置,也就是說,若是沒有顯示指定元素的位置,則element插入到末尾。相反,若是咱們指定特定位置,能夠寫Demo試試看
List<Student> list=new ArrayList<Student>(); Student student1=new Student(); student1.setStuName("小瀚"); student1.setStuAge(20); Student student2=new Student(); student2.setStuName("小露"); student2.setStuAge(20); Student student3=new Student(); student3.setStuName("小miss"); student3.setStuAge(20); list.add(student1); list.add(student2); list.add(1,student3); //獲得當前Iterator對象 Iterator<Student> it=list.iterator(); //提示迭代器是否已經返回集合中全部對象的引用 while(it.hasNext()){ //返回指向集合中下一個對象的應用 Student stu=it.next(); System.out.println(stu.getStuName()+" "+stu.getStuAge()); }
輸出結果爲:
小瀚 20
小miss 20
小露 20
list.add(1,student3);
該add()重載調用中,第一個參數表示該Student對象插入到列表中對應的索引1的位置,該位置原來由 小露 對象佔用,執行這段代碼後,新增的對象會插入到集合中的2個原有對象之間,所以 小露對象的索引變成了2。
還有另一個方法,set()方法,與add相似,不過set()方法使用來替換指定位置的當前對象。
List接口不但定義了帶索引未知的add()方法,還包含按索引移除對象的remove()方法,以下代碼
stuList.remove(0);
這樣將移除索引位置0上的對象,也就是小瀚這個對象,移除集合的第一個元素,其餘對象索引因爲移位操做而向下移位。remove()方法內部原理應該是這樣的吧,調用remove()方法會依次查找整個列表並將列表中的每個元素與傳入該方法的對象相比較,若是List中包含的元素很少,或須要移除的element位置靠前,那麼過程很快,可是,若是List較大或是比較靠後,那麼須要屢次遍歷和比較才能找到對應的對象,並移除掉。不僅是remove()方法是這樣的,例如Collection接口中定義的contains()方法和indexOf()方法都有此限制。
1.23 ArrayList
ArrayList的一些特質,以下
(1)ArrayList中可以包含重複的元素
(2)ArrayList中可以添加空值
(3)ArrayList類不是固有線程安全,所以在建立多線程使用ArrayList時,須要自行負責同步對ArrayList的修改。
這是我學java的第一篇博客,不對的地方請多多指教!