zoukankan      html  css  js  c++  java
  • java集合框架

    数组类Array是java中最基本的一个存储结构,它用于存储

    一组连续的对象或一组类型相同的基本类型的数据。 

     Array特点:效率高,但容量固定且无法动态改变,

                    缺点:无法判断其中存有多少元素,length只是告诉我们Array的容量.

     Arrays类: 专门用来操作Array,提供搜索,排序,复制等

    静态方法. 

    Arrays中equals():比较两个Array是否相等,Array拥有相同元素个数,且所有对应元素两两相等.

                fill():将值填入Array中.

                sort():用来对Array进行排序.

                binarySearch():在排好序的Array中寻找元素.

                System.arraycopy():Array的复制. 

      Vector:基于Array的List,性能也就不可能超越Array,并且Vector

    是“sychronizend”的,这个也是Vector和ArrayList的唯一区别.

     ArrayList:同Vector一样是一个基于Array的,但不同的是ArrayList

    不是同步的.所以在性能上要比Vector优越一些,但是运行到多线程环境

    中时,需要自己管理线程的同步问题.从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度特快

     LinkedList:LinkedList不同于前面两种List,它不是基于Array的.

     因为是基于链表实现的,data,(节点本身数据)nextNode(下一个节点)

    所以更适用于 插入,删除操作.

     【注意所有的List可以有null元素,元素可以重复】

      移除List重复元素:

           方法一:通过HashSet剔除 (本人喜欢使用的方式:使用的是hash数组不能产生重复数据的特性,来转换LIST)

    //  删除ArrayList中重复元素 
        HashSet hSet  =   new  HashSet(list);
        list.clear();
        list.addAll(hSet);
        System.out.println(list); 
             方法二: 删除ArrayList中重复元素,保持顺序 
       // 删除ArrayList中重复元素,保持顺序 
     public   static   void  removeDuplicateWithOrder(List list)   {
          Set set  =   new  HashSet();
          List newList  =   new  ArrayList();
       for  (Iterator iter  =  list.iterator(); iter.hasNext();)   {
             Object element  =  iter.next();
             if  (set.add(element))
                newList.add(element);
         } 
         list.clear();
         list.addAll(newList);
         System.out.println( " remove duplicate "   +  list);

     }   

     HashSet:set同list一样都实现了Collection接口,但是他们的实现方式却大不一样. 【list是以Array为基础的,而Set则是HashMap的基础上实现的】

     HashSet的存储方式是把HashMap中的Key作为Set的 对应存储项,这也是为什么在Set中不能像在List中一样有重复的项的根本原因,因为HashMap的key是不能有重复的。HashSet能快速定位 一个元素,但是放到HashSet中的对象需要实现hashCode()方法0。

      TreeSet:Treeset将放入其中的元素按序存放,这就要求你放入其中的

    对象时可排序的,这就用到了集合框架提供的另外两个实用类

    Comparable和Comparator。 

     【一个类是可排序的,它就应该实现Comparable接口.】

     【有时多个类具有相同的排序算法,那就不需要重复定义相同的排序算法,只要实现Comparator接口即可】

    TreeSet是SortedSet的子类,它不同于HashSet的根本就是TreeSet

    是有序的,它是通过SortedMap来实现的.

     HashMap:也用到了哈希码的算法,以便快速查找一个键,

    TreemMap对键按序存放,因此它有一些扩展的方法,比如firstkey(),lastkey()等. 当多个线程访问treemap时,要自己为之提供外同步.

    HashTable:不允许空键或值.Hashtable的方法是Synchronize的,

    在多个线程访问Hashtable时,不需要自己为它的方法实现同步. 

     【Map有两种比较常用的实现:HashTable.HashMap和TreeMap.】

  • 相关阅读:
    [转]C#获取文件的MD5值
    跨域ajax返回
    根据子表的条件修改主表的数据
    网络与多线程的设计例子
    网络与多线程的设计模式
    tcpdump移植和使用 -- by Johnson
    关于程序的歪门邪说--by Johnson
    重装系统——联想window 10
    Qt项目中error: C2001: newline in constant错误的解决
    使用NSIS制作Windows安装程序快速入门
  • 原文地址:https://www.cnblogs.com/God-boy1/p/3917941.html
Copyright © 2011-2022 走看看