集合

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会将数组中的元素作为集合中的元素。

原文地址:https://www.cnblogs.com/juaner767/p/5656595.html