Java集合类主要有以下几种:
1、List结构的集合类
ArrayList类,LinkedList类,Vector类,Stack类;
import java.util.ArrayList; public class Test { public static void main(String args[]) { ClerkManage cm = new ClerkManage(); Clerk clerk1 = new Clerk("01", "宋江", 40, 20000); Clerk clerk2 = new Clerk("02", "吴用", 38, 18000); Clerk clerk3 = new Clerk("03", "林冲", 42, 15000); cm.addClerk(clerk1); cm.addClerk(clerk2); cm.addClerk(clerk3); cm.showInfo("02"); cm.updateSalary("01",25000); cm.removeClerk("03"); } } class ClerkManage { private ArrayList al = null; public ClerkManage() { al = new ArrayList(); } public void addClerk(Clerk clerk) { al.add(clerk); } public void showInfo(String no) { for (int i = 0; i < al.size(); i++) { Clerk clerk = (Clerk) al.get(i); if (clerk.getNo().equals(no)) { System.out.println("找到该员工信息!"); System.out.println("姓名:" + clerk.getName()); System.out.println("年龄:" + clerk.getAge()); System.out.println("薪水:" + clerk.getSalary()); } } } public void updateSalary(String no, float salary) { for (int i = 0; i < al.size(); i++) { Clerk clerk = (Clerk) al.get(i); if (clerk.getNo().equals(no)) { clerk.setSalary(salary); } } } public void removeClerk(String no) { for (int i = 0; i < al.size(); i++) { Clerk clerk = (Clerk) al.get(i); if (clerk.getNo().equals(no)) { al.remove(i); } } } } class Clerk { private String no; private String name; private int age; private float salary; public Clerk(String no, String name, int age, float salary) { this.no = no; this.name = name; this.age = age; this.salary = salary; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public float getSalary() { return salary; } public void setSalary(float salary) { this.salary = salary; } public String getNo() { return no; } public void setNo(String no) { this.no = no; } }
LinkedList、Vector、Stack与ArrayList大同小异,无键值概念;
ArrayList与Vector都是java的集合类,都可以用来存放java对象,这是他们的相同点,他们的不同点如下:
①同步性,Vector是同步的,而ArrayList是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合,那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率。
②数据增长,当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大,所以如果你要在集合中保存大量的数据,那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。
2、Map结构的集合类
HashMap类,Hashtable类
public class Test { public static void main(String args[]) { HashMap hm = new HashMap(); Clerk clerk1 = new Clerk("01", "宋江", 40, 20000); Clerk clerk2 = new Clerk("02", "吴用", 38, 18000); Clerk clerk3 = new Clerk("03", "林冲", 42, 15000); hm.put("01", clerk1); hm.put("02", clerk2); hm.put("03", clerk3); if (hm.containsKey("01")) { System.out.println("有该员工!"); Clerk clerk = (Clerk) hm.get("01"); System.out.println("姓名:" + clerk.getName()); System.out.println("年龄:" + clerk.getAge()); System.out.println("薪水:" + clerk.getSalary()); } else { System.out.println("查无此人!"); } //遍历HashMap中所有的key和value Iterator it = hm.keySet().iterator(); while (it.hasNext()) { //取出key String key = it.next().toString(); Clerk clerk = (Clerk) hm.get(key); System.out.println("姓名:" + clerk.getName()); System.out.println("年龄:" + clerk.getAge()); System.out.println("薪水:" + clerk.getSalary()); } } }
HashMap与Hashtable都是java的集合类,都可以用来存放java对象,这是他们的相同点,但是他们也有区别:
①Hashtable是基于陈旧的Dictionary类的,HashMap是java 1.2引进的Map接口的一个实现。
②Hashtable是同步的,这个类的一些方法保证了Hashtable中的对象是线程安全的,而HashMap则是异步的,因此HashMap中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合,那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率。
③HashMap可以让你将空值作为一个表的条目的key或value,但是HashTable是不能放入空值的(null)
3、Set结构的集合类
HashSet类,TreeSet类
4、Queue结构的集合
Queue接口
总结:
1、如果要求线程安全,使用Vector,Hashtable;
2、如果不要求线程安全,应使用ArrayList,LinkedList,HashMap;
3、如果要求键值对,则使用HashMap,Hashtable;
4、如果数据量很大,又要线程安全考虑Vector;