集合(容器)

来源:互联网 发布:bluegriffon mac 编辑:程序博客网 时间:2024/06/15 20:43
     JAVA中的集合主要是用来干嘛的呢?在JAVA语言中,为了方便对多个对象的操作,我们就需要一些能够存储这些对象的东西,虽然数组Array可以实现这个功能,但是它是有一定的弊端的。这时候就要用到JAVA集合了,JAVA集合就像一种容器,能够动态的将对象存入容器中。
     先说说数组,虽然数组也可以用来存储对象,但是它是有它的弊端的
          ①数组一旦被创建后,它的长度是不可变得,就像这样  Object[] P = new Object(10) 之后是不能够改变它的长度的
          ②数组中实际的元素个数是不可知的,所以会导致一些空间的浪费。
     为了避免上面的两个问题,我们就需要用到集合来解决了,JAVA的集合分为Collection接口和Map接口两种体系,首先Collection接口中包含两类,一是set,二是list,其中set的特点主要是其中的数据是无序的,不可重复的(有点类似于数学中的集合),list的特点是有序的,并且是可重复的,所以list可以叫做动态数组(平时用的数组是静态的)。而对于Map接口,它其实是一个有着映射关系的集合(就像数学中的函数一样),在它之中的任意一个元素,总能找到一个元素与之对应。
     下面来说说关于集合中的Collection接口,在Collection接口中包含了一些方法,如下:
1:size()  它可以返回集合的元素个数
2:add(Object e)  它可以向集合中添加任意元素
3:addAll(Collection e)  它可以将e集合中的所有元素都添加到当前集合中去
4:clear()  看名字就知道,它可以清空集合
5;isEmpty()  它可以判断一个集合是否为空  其返回值是boolean类型的
上面五个的实现方式如下:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import org.junit.Test;
public class CollectionTest {
        @Test
        public void testCollection1(){
               //1:size():返回集合中的元素个数
               Collection A = new ArrayList();
              System. out.println(A .size());
               //2:add(Object e):向集合中添加一个元素
               A.add(12);
              System. out.println(A .size());
               //3:addAll(Collection obj):将集合obj中的所有元素都添加到集合中去
               Collection obj = new ArrayList();
               obj.add(new Date());
               obj.add("AA");
               A.addAll(obj);
              System. out.println(A .size());
              System. out.println(A );//打印集合中的元素
               //4:clear():清空集合中的元素
               A.clear();
              System. out.println(A .size());
               //5:isEmpty():判断集合是否为空
              System. out.println(A .isEmpty());  
       }
}//输出结果如下
0
1
3
[12, Wed May 17 14:01:38 GMT+08:00 2017, AA]
0
true
6:contains(Object e)  判断当前集合中是否有元素e
7:containsAll(Collection e)  判断当前集合中是否包含了集合e中的所有元素
8:retainAll(Collection e)  求当前集合与e的共有元素  并将其返回给当前集合
9:remove(Object e)  将元素e从当前集合中除去  成功返回true  失败返回false
10:removeAll(Collection e)  将当前集合中与集合e共有的元素删除  成功返回true  失败返回false
上五个的具体实现如下:
        @Test
        public void testCollection2(){
               //6:contains(Object e):判断e是否存在于当前集合中
               Collection A = new ArrayList();
               Collection C = new ArrayList();
               A.add("BB" );
               A.add("AA" );
               A.add(123);
               C.addAll(A);
              System. out.println(A .contains("BB")); //true
               //7:containsAll(Collection e):判断当前集合是否包含了集合e的所有元素  存在返回true  反之返回false
               Collection B = new ArrayList();
               B.add("BB" );
               B.add("AA" );
              System. out.println(A .containsAll(B)); //true
               //8:retainAll(Collection e):求e与当前集合的共有元素并返回给当前集合,成功返回true反之返回false
               A.retainAll(B );
              System. out.println(A );//[BB,AA]
               //9:remove(Object e):删除当前集合中的元素e,若成功,返回true,反之返回false
              System. out.println(A .remove("BB" ));//true
               //10:removeAll(Collection e):删除当前集合中与e所共有的元素,成功返回true,反之返回false
               C.removeAll(B );
              System. out.println(C );//[123]
       }
}
11:equals(Object e)  判断两个集合是否完全相同
12:toArray()  将集合e转换为数组
13:hashcode():生成当前集合的哈希码
14:iterator()  返回一个Iterator(迭代器)类型的对象  从而可以实现当前集合的遍历!同时配合着Iterator中的hasNext()方法与next()方法使用可以做到遍历集合的目的  hasNext() 是一个返回值为boolean类型的方法,它可以用来判断集合从第一个元素开始是否存在下一个元素  而next()是返回集合的下一个元素。
以上四个方法的用法如下:
        @Test
        public void testCollection3(){
               Collection A = new ArrayList();
               Collection C = new ArrayList();
               A.add("BB" );
               A.add("AA" );
               A.add(123);
               C.addAll(A);
               //11:equals() 判断两个集合是否完全相同
                     System. out.println(A .equals(C ));//true
               //12:hashCode()
                     System. out.println(A .hashCode());//2124026
               //13:toArray() 将当前集合转换为数组
                      A.toArray();
               //14:iterator() 返回一个Iterator类型的对象,从而可以实现集合的遍历
                      //集合的遍历方法可以配合hasNext()方法与next()方法使用
                      Iterator Obj = C.iterator();
                      while(Obj .hasNext())
                     {
                           System. out.println(Obj .next());//BB  AA  123
                     }
              
       }
     在这里重点是iterator()这个方法,它返回了一个Iterator(迭代器)类型的对象,在Iterator类型中有两个方法  分别是hasNext()与next()  那么hasNext()方法相当于一个指针  先判断集合的第一个元素是否存在 ,若存在,则指针指向第一个元素,然后依次进行后面元素的判断,若不存在则返回false。对于next()方法,它和hasNext()的判断方式一样,只不过它是返回存在的那个元素。一般来说,这两个方法是配合一起使用的 ,就像上面例子中的一样,其中的C集合的遍历就是利用了迭代器的遍历方法;其实我们还可以用增强for循环来遍历一个集合,具体的实现方法如下:
                      for(Object each :C )
                     {
                          
                           System. out.println(each );
                         }
       对上面这个例子来说" : "后为需要被遍历的集合,而" : "后的变量为一个局部变量,它是用来存从集合C中遍历出的元素的(相当于对数组进行遍历时的S = A[1]),所以这个局部变量的类型一般声明为Object类型;如果在上面的for循环中加入了一条语句如下:         
    
                      for(Object each :C )
                     {
                            each = "帅哥";
                           System. out.println(each );
                     }
    那么上面这个例子的输出就都为"帅哥"了,但是这里一定要注意集合C中所有元素的值还是没有发生改变的,相当于这里你只是改变了each所存的内容。那么增强for循环结束条件就是直到集合中的所有元素都被遍历了一遍。
原创粉丝点击