集合类collection类详解和set map简介





  1. 集合

    1. List、Map、Set的常用函数;

    2. 将一个ArrayList转化为指定类型的数组;

       

    3. 遍历List、Map、Set(3种方法);

    4. 边遍历,边删除List、Set的元素;

      遍历集合举例:

      package day4demo;
      
      import java.util.*;
      
      
      
      public class day4demo6 {
      
      
      
          /**
      
           * @param args
      
           */
      
          public static void ergodiclist1(List<String> list)
      
          {
      
              Object[] obj=list.toArray();
      
              for(int i=0;i<obj.length;i++)
      
              {
      
                  System.out.println(obj[i]);
      
              }
      
          }
      
          public static void ergodiclist2(List<String> list)
      
          {
      
              for(String it:list)
      
              {
      
                  System.out.println(it);
      
              }
      
          }
      
          public static void ergodiclist3(List<String> list)
      
          {
      
              Iterator<String> it=list.iterator();
      
              while(it.hasNext())
      
              {
      
                  System.out.println(it.next());
      
              }
      
          }
      
          public static void ergodiclist4(List<String> list)
      
          {
      
              for(int i=0;i<list.size();i++)
      
              {
      
                  System.out.println(list.get(i));
      
              }
      
          }
      
          public static void ergodiclist5(List<String> list)
      
          {
      
      
      
                  for(int i=0;i<list.size();i++){ 
      
                      if(list.get(i).equals("bobge")){ 
      
                         list.remove(i); 
      
                      } 
      
                  } 
      
                  System.out.println(list); 
      
          }
      
          public static void main(String[] args) {
      
              // TODO Auto-generated method stub
      
              List<String> list=new ArrayList<String>();
      
              list.add("bobge");
      
              list.add("wangchao");
      
              list.add("zhangyan");
      
              ergodiclist1(list);
      
              ergodiclist2(list);
      
              ergodiclist3(list);
      
              ergodiclist4(list);
      
      ergodiclist5(list);
      
          }
      
      
      
      }

       

      通过该题来总结一下集合的相关知识:

      集合类的说明:

      Collection(iterator方法遍历)

               -List (add)           //将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。

                         -LinkedList (get  remove insert等方法 )

                         -ArrayList             (size,isEmpty,get,set等方法,时间复杂度都是常数,但是add添加N个元素方法的时间复杂度是O(N))

                         -Vector

                                  -Stack

               -Set                     //不能有重复值

                         -HashSet

                         -TreeSet

      Map

               -HashMap

               -HashTable

               -WeakHashMap

       

      List接口:(涉及到堆栈,队列等操作

               从上面的结构图可以看出实现List接口的常用类有LinkedList,ArrayList,Vector和Stack.

      List除了具有从collection继承下来的iterator方法外,自身还提供了一个listiterator方法,返回了一个listiterator接口,与collection继承下来的iterator方法相比,多了一些add()之类的方法,允许添加,删除和设定元素,还允许向前向后遍历。

      LinkedList(需要快速插入,删除元素):允许null键null值,此外LinkedList还提供额外的get,remove,insert方法。这些方法可以使LinkedList用作堆栈,队列,或者双向队列。(LinkedList没有同步方法,如果多个线程同时访问一个LinkedList,则需要在创建list的时候构建一个同步的list)

      List list = Collections.synchronizedList(new LinkedList(...));

             ArrayList(需要快速随机访问元素):允许所有的元素包括nullArrayListLinkedList一样没有同步方法,它实现了可改变大小的数组(因为每个ArrayList实例都有一个容量(Capacity,用于存储数组元素的大小。随着增加元素而自动增加,但是它没有定义增加的算法,所以当需要插入大量的数据时可以用ensureCapacity(size+1)方法来增加ArrayList的容量用来提高插入效率。   

      public void add(int index, E element) {

          if (index > size || index < 0)

              throw new IndexOutOfBoundsException(

              "Index: "+index+", Size: "+size);

       

          ensureCapacity(size+1);  // Increments modCount!!

          System.arraycopy(elementData, index, elementData, index + 1,

                   size - index);

          elementData[index] = element;

          size++;

          }

             Vector:非常类似于ArrayList,也实现了可变大小的数组。但是Vector是同步的,由它创建的iterator虽然也是继承了collection接口,但是由于它是同步的,当一个线程改变了Vector的状态(如删除或者添加一些元素),这时候iterator方法会抛出ConcurrentModificationException异常,所以使用Vectoriterator方法必须捕获该异常。

             Stack类:继承自Vector,实现了先进后出的堆栈,提供了基本的POPPUSH方法,还有peek方法得到栈顶元素,empty检测栈低是否为空,search方法搜索元素所在位置。

      Set接口:

             由结构图可以知道实现set接口的常用类用hashsettreesetSet的构造函数有一个很明显的约束条件就是传入collection的参数不能包含重复的元素。因此在对Set元素进行操作时要小心,如果出现obj1.equals(obj2)可能会出现问题。

      Map接口:

             Map接口和setlist接口不同,它不是继承自collection。它提供keyvalue的映射,map的内容可以说是一组key集合或者一组value集合或者一组key-value的映射。因为一个key只能映射到一个value。而一个map不能有相同的key。它提供三种集合的视图:

       


        注意:尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值