您的位置:首页 > 其它

集合

2016-07-13 20:18 369 查看

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会将数组中的元素作为集合中的元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: