集合框架Collection概述

由于存储方式的不同,出现了多种容器。
Collection 层次结构 中的根接口,它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。
List:元素是有序的,元素可以重复。因为该集合体系有索引。ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。Vector:底层是数组数据结构。线程同步。因为效率低而被ArrayList替代了。
List集合特有的迭代器。ListIterator是Iterator的子接口。
LinkedList对象可以使用descendingIterator迭代器反转对象元素。
在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生ConcurrentModificationException异常。所以,在迭代器时,只能用迭代器的方法操作元素,可是Iterator方法是有限的,只能对元素进行判断,取出,删除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口ListIterator。该接口只能通过List集合的listIterator方法获取。
代码如下:

  1. import java.util.*;  
  2. public class ListDemo   {  
  3.         public static void main(String[] args) {  
  4.                   
  5.                 LinkedList<String>  arr=new LinkedList<String>();  
  6.                   
  7.                 arr.add( "元素1");//添加元素  
  8.                 arr.add( "元素2");  
  9.                 arr.add("元素3");  
  10.                 arr.add("元素4");  
  11.                 arr.add("元素5");  
  12.                 arr.add("元素6");  
  13.                 //迭代器反向读取元素。  
  14.                 Iterator it=arr.descendingIterator();  
  15.                 while(it.hasNext()){   
  16.                     it.next();  
  17.                     if(it.hasNext()){  
  18.                         it.next();  
  19.                         it.remove();  
  20.                     }  
  21.                  }  
  22.                 System.out.println(arr);  
  23.                 ListIterator<String> lit=arr.listIterator();  
  24.                 while(lit.hasNext()){  
  25.                    lit.next();    //指定添加元素位置  
  26.                    lit.add("wwww");  
  27.                }  
  28.                 System.out.println(arr);  
  29.         }  
  30. }  


Set:无序,不可以重复元素。
 HashSet的数据结构是哈希表。线程是非同步的。 保证元素唯一性的原理:判断元素的hashCode值是否相同。 如果相同,还会继续判断元素的equals方法,是否为true。 TreeSet 底层数据结构是二叉树。 保证元素唯一性的依据是 compareTo方法.可以对Set集合中的元素进行排序; 第一种方式让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法。这种方式也成为元素的自然顺序,或者叫做默认顺序。 第二种排序方式是当元素自身不具备比较性时,或者具备的比较性不是所需要的。这时就需要让集合自身具备比较性。在集合初始化时,就有了比较方式。

排序时,当主要条件相同时,一定判断一下次要条件。当元素自身不具备比较性,或者具备的比较性不是所需要的。这时需要让容器自身具备比较性。定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。当两种排序都存在时,以比较器为主。定义一个类,实现Comparator接口,覆盖compare方法。

例如:对学生进行排序,排序规则是先看姓名,再看编号。职位表按字符串比较规则,编号按大小排序。

需求:
1.往TreeSet集合中存储自定义对象学生;

2.创建比较器并传递TreeSet集合、

3.学生进行排序

先看主要条件,再看次要条件。
代码如下:

  1. <pre name="code" class="java">import java.util.*;  
  2. public class SetDemo {  
  3.     public static void main(String[] args) {  
  4.         //比较器对象作为参数传递给TreeSet集合的构造函数  
  5.         TreeSet  ts=new TreeSet(new MyCompare());  
  6.         ts.add(new student("zhangsan",2009001));  
  7.         ts.add(new student("lisi",2009002));  
  8.         ts.add(new student("wangwu",2009003));  
  9.         ts.add(new student("zhaoliu",2009004));  
  10.         ts.add(new student("zhangsan",2009005));  
  11.         for(Object f:ts){  
  12.             student s=(student) f;  
  13.             System.out.println(s.getName()+"\t"+s.getId());  
  14.         }  
  15.     }  
  16.   
  17. }  
  18. //创建以比较器:定义一个类,实现Comparator接口,覆盖compare方法。  
  19. class MyCompare implements Comparator{  
  20.     public int compare(Object o1, Object o2) {  
  21.         // TODO Auto-generated method stub  
  22.         student s1=(student) o1;  
  23.         student s2=(student) o2;  
  24.         int num = s1.getName().compareTo(s2.getName());  
  25.         if(num==0){  
  26.             return new Integer(s1.getId()).compareTo(new Integer(s2.getId()));  
  27.         }  
  28.         return num;  
  29.     }  
  30.       
  31. }  
  32. //创建学生类  
  33. class student{  
  34.     private String name;  
  35.     private int  id;  
  36.     student(){}  
  37.     student(String name){  
  38.         this.name=name;  
  39.     }  
  40.     student(int id){  
  41.         this.id=id;  
  42.     }  
  43.     student(String name,int id){  
  44.         this.name=name;  
  45.         this.id=id;  
  46.     }  
  47.     public void setName(String name){  
  48.         this.name=name;  
  49.     }  
  50.     public void setId(int  id){  
  51.         this.id=id;  
  52.     }  
  53.     public String getName(){  
  54.         return name;  
  55.     }  
  56.     public int getId(){  
  57.         return id;  
  58.     }  
  59.       
  60. }</pre><br><br> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值