Java集合类实例解析(9页).doc
-Java集合类实例解析-第 9 页Java集合类实例解析我们看一个简单的例子,来了解一下集合类的基本方法的使用:import java.util.*; public class CollectionToArray public static void main(String args) Collection collection1=new ArrayList();/创建一个集合对象 collection1.add("000");/添加对象到Collection集合中 collection1.add("111"); collection1.add("222"); System.out.println("集合collection1的大小:"+collection1.size(); System.out.println("集合collection1的内容:"+collection1); collection1.remove("000");/从集合collection1中移除掉 "000" 这个对象 System.out.println("集合collection1移除 000 后的内容:"+collection1); System.out.println("集合collection1中是否包含000 :"+collection1.contains("000"); System.out.println("集合collection1中是否包含111 :"+collection1.contains("111"); Collection collection2=new ArrayList(); collection2.addAll(collection1);/将collection1 集合中的元素全部都加到collection2中 System.out.println("集合collection2的内容:"+collection2); collection2.clear();/清空集合 collection1 中的元素 System.out.println("集合collection2是否为空 :"+collection2.isEmpty(); /将集合collection1转化为数组 Object s= collection1.toArray(); for(int i=0;i<s.length;i+) System.out.println(si); 运行结果为:集合collection1的大小:3 集合collection1的内容:000, 111, 222 集合collection1移除 000 后的内容:111, 222 集合collection1中是否包含000 :false 集合collection1中是否包含111 :true 集合collection2的内容:111, 222 集合collection2是否为空 :true 111 222 这里需要注意的是,Collection 它仅仅只是一个接口,而我们真正使用的时候,确是创建该接口的一个实现类。做为集合的接口,它定义了所有属于集合的类所都应该具有的一些方法。如ArrayList (列表)类是集合类的一种实现方式。 下面,我们看一个对于迭代器的简单使用:import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class IteratorDemo public static void main(String args) Collection collection = new ArrayList(); collection.add("s1"); collection.add("s2"); collection.add("s3"); Iterator iterator = collection.iterator();/得到一个迭代器 while (iterator.hasNext() /遍历 Object element = iterator.next(); System.out.println("iterator = " + element); if(collection.isEmpty() System.out.println("collection is Empty!"); else System.out.println("collection is not Empty! size="+collection.size(); Iterator iterator2 = collection.iterator(); while (iterator2.hasNext() /移除元素 Object element = iterator2.next(); System.out.println("remove: "+element); iterator2.remove(); Iterator iterator3 = collection.iterator(); if (!iterator3.hasNext() /察看是否还有元素 System.out.println("还有元素"); if(collection.isEmpty() System.out.println("collection is Empty!"); /使用collection.isEmpty()方法来判断 程序的运行结果为:iterator = s1 iterator = s2 iterator = s3 collection is not Empty! size=3 remove: s1 remove: s2 remove: s3 还有元素 collection is Empty! 可以看到,Java的Collection的Iterator 能够用来,: 1) 使用方法iterator() 要求容器返回一个Iterator .第一次调用Iterator 的next() 方法时,它返回集合序列的第一个元素。 2) 使用next() 获得集合序列的中的下一个元素。 3) 使用hasNext()检查序列中是否元素。 4) 使用remove()将迭代器新返回的元素删除。 需要注意的是:方法删除由next方法返回的最后一个元素,在每次调用next时,remove方法只能被调用一次 . 大家看,Java 实现的这个迭代器的使用就是如此的简单。Iterator(跌代器)虽然功能简单,但仍然可以帮助我们解决许多问题,同时针对List 还有一个更复杂更高级的ListIterator.您可以在下面的List讲解中得到进一步的介绍。 我们看一个List的例子:import java.util.*; public class ListIteratorTest public static void main(String args) List list = new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); list.add("ddd"); System.out.println("下标0开始:"+list.listIterator(0).next();/next() System.out.println("下标1开始:"+list.listIterator(1).next(); System.out.println("子List 1-3:"+list.subList(1,3);/子列表 ListIterator it = list.listIterator();/默认从下标0开始 /隐式光标属性add操作 ,插入到当前的下标的前面 it.add("sss"); while(it.hasNext() System.out.println("next Index="+it.nextIndex()+",Object="+it.next(); /set属性 ListIterator it1 = list.listIterator(); it1.next(); it1.set("ooo"); ListIterator it2 = list.listIterator(list.size();/下标 while(it2.hasPrevious() System.out.println("previous Index="+it2.previousIndex()+",Object="+it2.previous(); 程序的执行结果为:下标0开始:aaa 下标1开始:bbb 子List 1-3:bbb, ccc next Index=1,Object=aaa next Index=2,Object=bbb next Index=3,Object=ccc next Index=4,Object=ddd previous Index=4,Object=ddd previous Index=3,Object=ccc previous Index=2,Object=bbb previous Index=1,Object=a用得最多的主要有Set,List,Map,Iterator这几个接口, Set和List接口都是Collection接口的子接口,有很多相同的地方,我们只是撑握了Collection接口的方法,Set和List的用法也就差不多了. Set和List 的区别: 1、Set是没有顺序的,不能放重复的数据(相同的数据) 2、List是有顺序的,可以存放重复的数据(相同的数据)Set的实现类常用的主要有两个:HashSet、TreeSet 我们可以把一类对象添加到集合中,并且按对象的某一个属性进行排序(客户化排序和自然排序) 1、对TreeSet集进行客户化排序要求写一个类实现Comparator接口,并且重写其中的Compare方法 例: 客户化排序容易扩展,如果要按其它的属性排序,只需要重新写一个类实现Comparator接口就可以了, 不需要修改原来的代码。 class Users private String name; private int id; public Users(String name,int id) this.name=name; this.id=id; public void setName(String name) this.name=name; public String getName() return name; public void setId(int id) this.id=id; public int getId() return id; /这里重写了父类的toString方法 public String toString() return this.name + "t" + this.id + "t" /这个类实现Comparator接口,并且重写了其中的compare方法 public class MyComparator implements Comparator public int compare(Object o1,Object o2) Users user1=(Users)o1; Users user2=(Users)o2; if(user1.getId>user2.getId) return 1; else if(user1.getId=user2.getId) return 0; return -1; class TestComparator public static void main(String args) TestComparator.test(); public static void test() Set set=new TreeSet(new MyComparator(); Users user1=new Users("张三",17); Users user2=new Users("李四",13); Users user3=new Users("王五",19); Users user5=new Users("王五",19); set.add(user1); set.add(user2); set.add(user3); set.add(user5); for(Object obj :set) System.out.println(obj); 2、自然排序,将需要排序的那个类实现Comparable接口并且重写其中的compareTo方法 例如下: class Users implements Comparable private String name; private int id; public Users(String name,int id) this.name=name; this.id=id; public void setName(String name) this.name=name; public String getName() return name; public void setId(int id) this.id=id; public int getId() return id; /这里重写了父类的toString方法 public String toString() return this.name + "t" + this.id + "t" /重写compareTo方法 public int compareTo(Object o) UserBean user = (UserBean) o; if (this.id > user.id) return 1; else if (this.id = user.id) return 0; return -1; 3.如果是HashSet自然排序,则要求排序的类重写hashCode方法和equals方法 二、对List和Set集进行遍历: List集有三种方法进行遍历: 1、通过下标遍历,2使用迭代器进行遍历,3、增强循环进行遍历 List list=new ArrayList(); list.add("aa"); list.add("bb"); list.add("cc"); for(int i=0;i<list.size();i+) System.out.println(list.get(i); Iterator it=list.iterator(); while(it.hasNext() System.out.println(it.next(); for(Object obj :list) System.out.println(obj); 三、Vector和ArrayList的区别: 1、Vector 和ArrayList都实现了List接口,Vector是线程安全的,可以多个线程同时访问,但性能比较差。 2、ArrayList线程不安全,不支持多个线程同时访问,但性能比较好,访问的速度快。 四、Map集是以键值对的形式存放的,键不可以重复,值可以重复,如果键重复,会将原来的值覆盖, Map集的实现类主要有三个:HashMap,TreeMap,HashTable HashMap与HashTable 的区别: 1、HashTable是线程安全的,支持同步。2、HashMap线程不安全,不支持 同步,但性能比HashTable好 Map集的遍历: 1、 Map map=new HashMap() map.put("1","张飞"); map.put("2","关羽"); map.put("3","刘备"); /得到键的集合 Set set=map.keySet(); for(Object obj :set) System.out.println(map.get(obj); 2、 /得到健值对的集合 Set s=map.entrySet(); for(Object obj :set) System.out.println(obj); 五、对List集进行客户化排序,可以通过Collections类的sort方法,要求传一个List集和一个Comparator对象 例: List list=new ArrayList() Users user1=new Users("张三",17); Users user2=new Users("李四",13); Users user3=new Users("王五",19); Users user5=new Users("王五",19); list.add(user1); list.add(user2); list.add(user3); list.add(user5); Collections.sort(list,new Mycomparator(); Iterator it=list.iterator(); while(it.hasNext() System.out.println(it.next();