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.】

  • 相关阅读:
    leetcode 190 Reverse Bits
    vs2010 单文档MFC 通过加载位图文件作为客户区背景
    leetcode 198 House Robber
    记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence
    逆序数2 HDOJ 1394 Minimum Inversion Number
    矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence
    递推DP URAL 1586 Threeprime Numbers
    递推DP URAL 1167 Bicolored Horses
    递推DP URAL 1017 Staircases
    01背包 URAL 1073 Square Country
  • 原文地址:https://www.cnblogs.com/God-boy1/p/3917941.html
Copyright © 2011-2022 走看看