黑马程序员_Java_集合的基本用法总结

来源:互联网 发布:淘宝全景图 编辑:程序博客网 时间:2024/06/08 13:11

---------------------------------------------android培训、java培训、期待与您交流! ----------------------

 

数组是一个存放相同(或可兼容)类型数据的一个容器,但数组的特性是:大小固定,不能改变。

这样在创建时必须指明长度,因此在应用时会存在一定的限制。

如果事先不知道要存放数据的个数,或者需要一种比数组下标存取机制更灵活的方法时,此时就需要用到集合类。

注:虚线框为借口,实线框为集合

----------------------------------------------------------------------------------------------------------------------

List:元素有序,可重复,集合体系有索引

Set:元素无序,不可重复

Map:存储的是键值对

 

集合最大的特点:长度不固定;集合中必须存取对象

是集合都有如下特点:

(1)单元素添加、删除操作: 

 boolean add(Object obj):将对象添加给集合 

 boolean remove(Object obj): 如果集合中有与obj相匹配的对象,则删除对象obj

(2)查询操作: 

 int size() :返回当前集合中元素的数量 

 boolean isEmpty() :判断集合中是否有任何元素 

 boolean contains(Object obj) :查找集合中是否含有对象obj

 Iterator iterator() :返回一个迭代器,用来访问集合中的各个元素 

(3)组操作:作用于元素组或整个集合 

boolean containsAll(Collection c): 查找集合中是否含有集合c 中所有元素  

  boolean addAll(Collection c):将集合c 中所有元素添加给该集合  

  void clear(): 删除集合中所有元素 

void removeAll(Collection c):从集合中删除集合c 中的所有元素  

  void retainAll(Collection c):从集合中删除集合c 中不包含的元素 

(4)Collection转换为Object数组 : 

 Object[] toArray():返回一个内含集合所有元素的数组 

 Object[] toArray(Object[] a): 返回一个内含集合所有元素的数组。返回的数组和参

                                            数a的类型相同

 

 

例如:

import java.util.*; 

 

public class CollectionTest {  

       public static void main (String[] args) {   

              Collection c = new ArrayList();    //利用多态创建一个ArrayList对象,

 

              c.add ("hello"); // 可以放入不同类型的对象 ,因为未指定要存入的数据类型

              c.add (new Boolean(true));   

              c.add (new Integer(100)); 

 

       System.out.println ("size" + c.size() + ": " + c); //获得集合的尺寸

         System.out.println ("contains: " + c.contains(new Integer(100)));   //判断集合是否存在指                                                                                                    //定元素

        System.out.println (c.remove(new Boolean(true)));   //移除指定元素

        System.out.println ("isEmpty: " + c.isEmpty());   //判断集合是否为空

        System.out.println("size" + c.size() + ": " + c); //获得删除元素后集合的大小

        } 

----------------------------------------------------------------------------------------------------------------------

要想取出集合中的元素,需要迭代器Iterator进行迭代,迭代前需要判断是否存在下一个元素方法如下:boolean hasNext():判断是否存在另一个可访问的元素

                     Object next():返回访问的下一个元素,如果到达结尾,则抛出                                                             NoSuchElementException异常

                     Void remove():删除上次访问返回的对象;谨慎操作,需集合迭代完毕!否则                                             抛出ConcurrentModificationExceptiom异常并立即失败。

例如:

import java.util.ArrayList; 

import java.util.Collection; 

import java.util.Iterator; 

 

public class IteratorTest { 

public static void main(String[] args) {         

   Collection c = new ArrayList(); 

 

   c.add(new Integer(1));       

   c.add(new Integer(2));      

   c.add(new Integer(3));      

   c.add(new Integer(4));

  

    Iterator it = c.iterator(); //调用集合自身的迭代器

    while (it.hasNext()) {  //判断下一个元素是否存在

          Object tem = it.next(); //next()的返回值为Object类型,需要转换为相应类型 

          System.out.println (((Integer)tem).intValue() + " "); 

     }    

    } 

}

 

-------------------------------------------------------------------------------------------------------------------

List集合除了可以使用Iterator取出元素外还可以使用ListIterator进行迭代;ListIterator接口继承了Iterator接口,除了具有的功能外,还支持添加或更改底层集合中的元素,还支持双向遍历

ListIterator接口的主要方法有:

void add(Object obj):将对象obj添加到当前位置的前面 

void set(Object obj):用对象obj替代next或previous方法访问的上一个元素。如果上

                               次调用后列表结构被修改了,那么将抛出IllegalStateException异                                          常.

boolean hasPrevious():判断向后迭代时是否有元素可访问 

Object previous():返回上一个                                            对象 

int nextIndex():返回下次调用next方法时将返回的元素的索引 

int previousIndex():返回下次调用previous方法时将返回的元素的索引

----------------------------------------------------------------------------------------------------------------

LinkList除了集合共有的添加元素的方法外,还有自己独特的添加元素的方法

下面为其类中的部分方法的定义及功能说明。 

 void addFirst(Object obj): 将对象obj添加到列表的开头  

    void addLast(Object obj):将对象obj添加到列表的结尾  

    Object getFirst(): 返回列表开头的元素  

    Object getLast(): 返回列表结尾的元素 

 Object removeFirst(): 删除并且返回列表开头的元素  

    Object removeLast():删除并且返回列表结尾的元素 

 

LinkList也有其独特的构造方法:LinkedList()构造方法:构建一个空的链接列表 

                                              LinkedList(Collection c): 构建一个链接列表,并且添加                                                                                              集合c的所有元素

使用这些构造方法,可以轻松的把 LinkedList 当作一个堆栈、队列或其它面向端点的数据结构

例如:

public class LinkList{

   publicstatic void main(String[] args){

          LinkedList link = new LinkedList(); 

        

          link.add("a");         

          link.add("b");         

      link.addFirst("c");         

          link.addLast("e"); 

 

          System.out.println("首尾元素值是"+ link.getFirst() + ":" + link.getLast());         

         System.out.print("整个列表中的元素是:");         

         for (int i = 0; i < link.size(); i++) {   

                 System.out.print(link.get(i) + ",");         

         } 

   }

}

-------------------------------------------------------------------------------------------------------------------

Map接口不是Collection接口的继承。

Map基本特性:关键字不能重复,但值可以重复

基本方法如下:

(1)添加、删除操作 

          Object put(Object key, Object value): 将互相关联的一个关键字与一个值放入该映                                                                像。如果该关键字已经存在,那么与此关键字                                                                    相关的新值将取代旧值。方法返回关键字的旧                                                                      值,如果关键字原先并不存在,则返回null 

       Object remove(Object key): 从映像中删除与key相关的映射  

          void putAll(Map t): 将来自特定映像的所有元素添加给该映像  

          void clear(): 从映像中删除所有映射 

  其中的键和值都可以为null。但是,不能把Map作为一个键或值添加给自身。 

(2)查询操作 

      Object get(Object key): 获得与关键字key相关的值,并且返回与关键字key相关的对                                       象,如果没有在该映像中找到该关键字,则返回null。 

  boolean containsKey(Object key): 判断映像中是否存在关键字key  

     boolean containsValue(Object value): 判断映像中是否存在值value  

     int size(): 返回当前映像中映射的数量 

  boolean isEmpty() :判断映像中是否有任何映射 

(3)视图操作:处理映像中键/值对组 

   Set keySet():返回映像中所有关键字的视图集 ;因为映射中键的集合必须是唯一的,                            您用Set支持。还可以从视图中删除元素,同时,关键字和它相关的值                           将从源映像中被删除,但是你不能添加任何元素

      Set values():返回映像中所有值的视图集;可以从视图中删除元素,同时,值                                      和它的关键字将从源映像中被删除,但是不能添加任何元素         Set entrySet():返回Map.Entry对象的视图集,即映像中的关键字/值对。因为映射                                      是唯一的,用Set支持。还可以从视图中删除元素,同时,这些元素                             将从源映像中被删除,但是不能添加任何元素。 

 

Map.Entry接口 

Map的entrySet()方法返回一个实现Map.Entry接口的对象集合。集合中每个对象都是底层Map中一个特定的键/值对。通过这个集合的迭代器,可以获得每一个条目(唯一获取方式)的键或值并对值进行更改。当条目通过迭代器返回后,除非是迭代器自身的remove()方法或者迭代器返回的条目的setValue()方法,其余对源Map外部的修改都会导致此条目集变得无效,同时产生条目行为未定义。 

 Object getKey(): 返回条目的关键字  

    Object getValue(): 返回条目的值 

 Object setValue(Object value): 将相关映像中的值改为value,并且返回旧值 

 

Map集合可以使用增强否循环取出键值对;不能使用Iterator迭代器进行迭代处理,但可以先转换成Set集合

 

HashMap的使用——添加,删除,查找,遍历操作的应用示例 

public class Map{

   pubicstatic void main(String[] args){

          Map<Integer, String> map=new HashMap<Integer, String>();  

         

          map.put(1, "小王");    //往Map集合中添加键值对

          map.put(2, "小张");   

          map.put(3, "小李");   

          map.put(4, "小赵");   

          map.put(5, "小孙");     

 

          map.remove(2);   //移除2号键

          map.containsKey(3);   //判断是否包含3 键

          map.containsValue("小张");  //判断是否包含 小张 值

          System.out.println(map.size());     

 

          Set<Integer> keyset=map.keySet();  //遍历Map,将Map集合转换成Set集合

          Iterator<Integer> iterator=keyset.iterator(); 

          while(iterator.hasNext()){   

                 int key=iterator.next(); 

  

          System.out.print(key+"-"+map.get(key)); 

          }/

 

   }

 

}

0 0
原创粉丝点击