• 集合


    1.集合的分类

    ---|Collection: 单列集合

               ---|List: 有存储顺序, 可重复

                  ---|ArrayList:    数组实现, 查找快, 增删慢

                                      由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以查找时较快

                  ---|LinkedList:   链表实现, 增删快, 查找慢

                                      由于链表实现, 增加时只要让前一个元素记住自己就可以, 删除时让前一个元素记住后一个元素, 后一个元素记住前一个元素. 这样的增删效率较高但查询时需要一个一个的遍历, 所以效率较低

                  ---|Vector:   和ArrayList原理相同, 但线程安全, 效率略低

                                   和ArrayList实现方式相同, 但考虑了线程安全问题, 所以效率略低

               ---|Set: 无存储顺序, 不可重复

                  ---|HashSet

                  ---|TreeSet

                  ---|LinkedHashSet

    ---| Map: 键值对

           ---|HashMap

           ---|TreeMap

           ---|HashTable

           ---|LinkedHashMap

    2.collection接口的共性方法

    增加:

           1:add(E e)   将指定对象存储到容器中

                          add 方法的参数类型是Object 便于接收任意对象

           2:addAll(Collection<? extends E> c) 将指定集合中的元素添加到调用该方法和集合中

    删除:

           3:remove(Object o) 将指定的对象从集合中删除

           4:removeAll(Collection<?> c) 将指定集合中的元素删除

    修改

           5:clear() 清空集合中的所有元素

    判断

           6:isEmpty() 判断集合是否为空

           7:contains(Object o) 判断集合何中是否包含指定对象

               

           8:containsAll(Collection<?> c) 判断集合中是否包含指定集合

                                使用equals()判断两个对象是否相等 

    获取:   

      9:int size()    返回集合容器的大小

    转成数组

      10:toArray()   集合转换数组

    3.List集合特有的方法

    1:增加

            void add(int index, E element) 指定位置添加元素           

            boolean addAll(int index, Collection c) 指定位置添加集合 

    2:删除

        E remove(int index) 删除指定位置元素 

    3:修改

            E set(int index, E element)    返回的是需要替换的集合中的元素

    4:查找:

            E get(int index)             注意: IndexOutOfBoundsException

           int indexOf(Object o)         // 找不到返回-1

           lastIndexOf(Object o)

    5:求子集合

            List<E> subList(int fromIndex, int toIndex) // 不包含toIndex

    4.在迭代器迭代元素 的过程中,不允许使用集合对象改变集合中的元素个数,如果需要添加或者删除只能使用迭代器的方法进行操作。

      如果使用过了集合对象改变集合中元素个数那么就会出现ConcurrentModificationException异常。 迭代元素 的过程中: 迭代器创建到使用结束的时间。

    5.ArrayList

      ArrayList底层维护了一个Object[] 用于存储对象,默认数组的长度是10。可以通过 new ArrayList(20)显式的指定用于存储对象的数组的长度。

        当默认的或者指定的容量不够存储对象的时候,容量自动增长为原来的容量的1.5倍。

    6.HashSet

      元素的哈希值是通过元素的hashcode方法来获取的, HashSet首先判断两个元素的哈希值,如果哈希值一样,接着会比较equals方法,如果 equls结果为true ,HashSet就视为同一个元素,如果equals 为false就不是同一个元素。

    7.TreeSet

    TreeSet指定排序规则。

    方式一:元素自身具备比较性

      元素自身具备比较性,需要元素实现Comparable接口,重写compareTo方法,也就是让元素自身具备比较性,这种方式叫做元素的自然排序也叫做默认排序。

    方式二:容器具备比较性

      当元素自身不具备比较性,或者自身具备的比较性不是所需要的。那么此时可以让容器自身具备。需要定义一个类实现接口Comparator,重写compare方法,并将该接口的子类实例对象作为参数传递给TreeSet集合的构造方法。

    8.Map接口的共性方法

    1、添加

         V put(K key, V value)    (可以相同的key值,但是添加的value值会覆盖前面的,返回值是前一个,如果没有就返回null)                                         

         putAll(Map<? extends K,? extends V> m)  从指定映射中将所有映射关系复制到此映射中(可选操作)。

    2、删除

         remove()    删除关联对象,指定key对象

         clear()     清空集合对象

    3、获取

         value get(key); 可以用于判断键是否存在的情况。当指定的键不存在的时候,返回的是null。

    4、判断:

          boolean isEmpty()   长度为0返回true否则false

          boolean containsKey(Object key)  判断集合中是否包含指定的key

    5、boolean containsValue(Object value)  判断集合中是否包含指定的value

    6、长度

      Int size()

    7、将map 集合中所有的键取出存入set集合。

           Set<K> keySet()   返回所有的key对象的Set集合再通过get方法获取键对应的值。

    8、 values() ,获取所有的值.

           Collection<V> values()不能获取到key对象

    9、 Map.Entry对象  推荐使用   重点

           Map.entrySet()方法返回Set<Map.Entry<k,v>> ,Entry将map 集合中的键值映射关系打包成一个对象Entry对象,通过Map.Entry 对象的getKey,getValue获取其键和值。

    9.Collections与Arrays

    collections:

    1, 对list进行二分查找:

      前提该集合一定要有序。

      int binarySearch(list,key);//必须根据元素自然顺序对列表进行升级排序,要求list 集合中的元素都是Comparable 的子类。

      int binarySearch(list,key,Comparator);

    2,对list集合进行排序。

      sort(list);//对list进行排序,其实使用的是list容器中的对象的compareTo方法

      sort(list,comaprator);//按照指定比较器进行排序

    3,对集合取最大值或者最小值。

      max(Collection)

      max(Collection,comparator)

      min(Collection)

      min(Collection,comparator)
    4,对list集合进行反转。

      reverse(list);

    5,可以将不同步的集合变成同步的集合。

      Set synchronizedSet(Set<T> s)

      Map synchronizedMap(Map<K,V> m)

      List synchronizedList(List<T> list)

    arrays:

    1,二分查找,数组需要有序

      binarySearch(int[] a, int key)

      binarySearch(double[],double key)

    2,数组排序

      sort(int[])

      sort(char[])……

    3, 将数组变成字符串。

       toString(int[])

    4, 复制数组。
       copyOf();

    5, 复制部分数组。

      copyOfRange(int[] original, int from, int to):

    6, 比较两个数组是否相同。

      equals(int[],int[]);

    7, 将数组变成集合。

      List asList(T[]);

      这样可以通过集合的操作来操作数组中元素,但是不可以使用增删方法,add,remove。因为数组长度是固定的,会出现UnsupportOperationExcetion。可以使用的方法:contains,indexOf。

    如果数组中存入的基本数据类型,那么asList会将数组实体作为集合中的元素。

    如果数组中的存入的引用数据类型,那么asList会将数组中的元素作为集合中的元素。

  • 相关阅读:
    poj 3040 Allowance
    poj 2393 Yogurt factory
    【BZOJ1833】数字计数(ZJOI2010)-数位DP
    【BZOJ4820】硬币游戏(SDOI2017)-概率+高斯消元+KMP
    【BZOJ3626】LCA(LNOI2014)-树链剖分+离线处理
    【BZOJ4817】树点涂色(SDOI2017)-LCT+LCA+线段树
    【BZOJ1135】LYZ(POI2009)-线段树+Hall定理
    【CF392D】Three Arrays-set+multiset
    【51Nod1688】LYKMUL-线段树+乘法原理
    【BZOJ2956】模积和-数论分块
  • 原文地址:https://www.cnblogs.com/juaner767/p/5656595.html
Copyright © 2020-2023  润新知