日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

CoreJava 5.3 泛型数组列表

發布時間:2025/5/22 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CoreJava 5.3 泛型数组列表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、為了解決運行時動態更改數組的問題,使用ArrayList類;它與數組很相似,但在增加或刪除元素時具有自動調節數組容量的功能。
2、ArrayList是采用類型參數的泛型類。用法:ArrayList<Class Name> ArrayList<Employee> staff = new ArrayList<Employee>();
3、使用add方法添加元素: staff.add(new Employee("Harry", ...)); staff.add(new Employee("Tome", ....)); 如果調用add且內部數組已滿時,數組列表就會自動創建一個更大容量的數組,并將小數組中的對象全部拷貝到大數組中。
4、預先分配容量大小:如果可以準確的預計數組可能存儲的元素數量,可以在填充數組前調用ensureCapacity方法: staff.ensureCapacity(100); ? ?//分配一個包含100個對象的內部數組。 這里如過調用100add,是不會重新分配空間的。
5、把初始容量傳遞給構造器: ArrayList<Employee> staff = new ArrayList<Employee>(100); 警告: 分配數組列表:new ArrayList<Employee>(100);與新數組分配空間:new Employee[100];不同。
數組列表的容量與數組的大小不同:數組分配100個存儲空間就表明這個數組有100個空位置可用(即用或不用那100個空間都會擺在那,不多不少);而容量為100的數組列表僅表明它擁有保存100個元素的潛力(所謂潛力就是可能超越100,可能不足100.這要實際運行中動態決定是否會重新分配容量),但是可以確定的是數組列表在完成初始化構造時不含任何元素。

6、size方法將返回數組列表實際元素個數:staff.size();返回staff數組列表的當前元素個數,等價于a.length; 當確定數組列表不再增刪元素時可以使用trimToSize方法。這個方法將存儲空間調整為當前元素所用空間,多于的交給垃圾回收器回收。注意:一定是確定數組列表大小不變后才使用該方法,因為使用該方法后再添加新元素就要花時間再次移動存儲塊,時間開銷較大。
5.3.1 訪問數組列表元素 1、ArrayList類不是Java的一部分。而是由某些人編寫且被放到標準庫中的一個實用類。
2、使用get和set方法訪問和改變數組元素,不能采用數組的[]語法格式。 例如:改變第i個元素:staff.set(i, harry); 等價于a[i] = harry; 警告:使用add方法添加新的元素,set方法只能改變已有元素的內容。
使用get訪問數組列表的元素:Employee e = staff.get(i); 等價于:Employee e = a[i];
3、介紹個技巧,即可靈活的擴展數組,又可以方便的訪問數組元素。 1)創建一個數組列表,并添加所有元素: ArrayList<X> list = ArrayList<X>(); while (...) { ? ? x = ...; ? ? list.add(x); }
2)使用toArray方法將數組列表元素拷貝到一個數組中: x[] a = new x[list.size()]; list.toArray(a);
3)除了在尾部追加元素之外,使用帶索引參數的add方法插入新元素: int n = staff.size() / 2; staff.add(n, e); 插入新元素后位于n后的所有元素自動向后移動,若超出容量將會重新分配存儲空間。
4)刪除元素:Emplouyee e = staff.remove(n);
5)使用“for each”循環對數組列表遍歷: for (Employee e : staff) ? ? //do something with e;
4、源代碼:例5-4,將Employee[]數組替換成ArrayList<Employee>。 注意變化: 不必指出數組的大小; 使用add想數組列表添加任意多的元素; 使用size代替length計算元素個數; 使用get[i]代替a[i]訪問元素。
ArrayListTest.java: [java] view plaincopy
  • package?com.vicent.corejava.arraylisttest;??
  • ??
  • import?java.util.ArrayList;??
  • ??
  • public?class?ArrayListTest?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????ArrayList<Employee>?staff?=?new?ArrayList<Employee>();??
  • ??????????
  • ????????staff.add(new?Employee("Carl",?7500,?1987,?12,?15));??
  • ????????staff.add(new?Employee("Harry",?5000,?1989,?10,?1));??
  • ????????staff.add(new?Employee("Tony",?4000,?1990,?3,?15));??
  • ??????????
  • ????????for?(Employee?e?:?staff)??
  • ????????????e.raiseSalary(5);??
  • ??????????
  • ????????for?(Employee?e?:?staff)??
  • ????????????System.out.println("name:?"?+?e.getName()??
  • ????????????????????+?",?salary:?"?+?e.getSalary()??
  • ????????????????????+?",?hireDay:?"?+?e.getHireDay());??
  • ??????????????
  • ????}??
  • ??
  • }??

  • Employee.java:
    [java] view plaincopy
  • package?com.vicent.corejava.arraylisttest;??
  • ??
  • import?java.util.Date;??
  • import?java.util.GregorianCalendar;??
  • ??
  • public?class?Employee?{??
  • ??
  • ????private?String?name;??
  • ????private?double?salary;??
  • ????private?Date?hireDay;??
  • ????private?double?raise;??
  • ??
  • ????public?Employee(String?aName,?double?aSalary,?int?year,?int?month,?int?day)?{??
  • ????????name?=?aName;??
  • ????????salary?=?aSalary;??
  • ????????GregorianCalendar?calendar?=?new?GregorianCalendar(year,?month?-?1,?day);??
  • ????????hireDay?=?calendar.getTime();??
  • ????}??
  • ??????
  • ????public?String?getName()?{??
  • ????????return?name;??
  • ????}??
  • ??????
  • ????public?double?getSalary()?{??
  • ????????return?salary;??
  • ????}??
  • ??????
  • ????public?Date?getHireDay()?{??
  • ????????return?hireDay;??
  • ????}??
  • ??????
  • ????public?void?raiseSalary(double?byPercent)?{??
  • ????????raise?=?salary?*?byPercent?/?100;??
  • ????????salary?+=?raise;??
  • ????}??
  • ??
  • }??

  • 運行結果: name: Carl, salary: 7875.0, hireDay: Tue Dec 15 00:00:00 CST 1987 name: Harry, salary: 5250.0, hireDay: Sun Oct 01 00:00:00 CST 1989 name: Tony, salary: 4200.0, hireDay: Thu Mar 15 00:00:00 CST 1990

    轉載于:https://www.cnblogs.com/vincent-hv/archive/2013/02/28/2958553.html

    總結

    以上是生活随笔為你收集整理的CoreJava 5.3 泛型数组列表的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。