赞
踩
集合一共分为两部分:Collection(单列集合)每个元素(数据)只包含一个值。
Map(双列集合)每个元素包含两个值(键值对)。
概念:Collection是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。
List系列集合:添加的元素是有序、可重复、有索引。
Set系列集合:添加的元素是无序、不重复、无索引。
方法名 | 说明 |
public boolean add(E e) | 把给定的对象添加到当前集合中 |
public void clear() | 清空集合中所有的元素 |
public boolean remove(E e) | 把给定的对象在当前集合中删除 |
public boolean contains(Object obj) | 判断当前集合中是否包含给定的对象 |
public boolean isEmpty() | 判断当前集合是否为空 |
public int size() | 返回集合中元素的个数。 |
public Object[] toArray() | 把集合中的元素,存储到数组中 |
概念:迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator。
方法名称 | 说明 |
Iterator<E> iterator() | 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的第一个元素 |
boolean hasNext() | 询问当前位置是否有元素存在,存在返回true ,不存在返回false |
E next() | 获取当前位置的元素,并同时将迭代器对象指向下一个元素处。 |
执行流程图
概念:只适合用于做查询操作,不适合增删操作。
增强for可以用来遍历集合或者数组。
增强for遍历集合,本质就是迭代器遍历集合的简化写法。
格式:
方法名称 | 说明 |
default void forEach(Consumer<? super T> action) | 结合lambda遍历集合 |
- Collection<String> lists = new ArrayList<>();
- lists.forEach(new Consumer<String>(){
- @Override
- public void accept(String s) {
- System.out.println(s);}});
-
- 用Lamvda简化后代码:
- lists.forEach(s -> { System.out.println(s); });
概念:List集合因为支持索引,所以多了很多与索引相关的方法,当然,Collection的功能List也都继承了。
方法名称 | 说明 |
void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
E get(int index) | 返回指定索引处的元素 |
特点:存取有序、可重复、有索引
底层原理:是基于数组实现的
利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组
添加第一个元素时,底层会创建一个新的长度为10的数组
存满时,会扩容1.5倍
使用场景:大量数据的查询、 少量数据的增删
数据结构:双链表 、查询慢、增删快
方法名称 | 说明 |
public void addFirst(E e) | 在该列表开头插入指定的元素 |
public void addLast(E e) | 将指定的元素追加到此列表的末尾 |
public E getFirst() | 返回此列表中的第一个元素 |
public E getLast() | 返回此列表中的最后一个元素 |
public E removeFirst() | 从此列表中删除并返回第一个元素 |
public E removeLast() | 从此列表中删除并返回最后一个元素 |
特点: 无序:添加数据的顺序和获取出的数据顺序不一致;
底层原理:基于哈希表实现。 哈希表是一种增删改查数据,性能都较好的数据结构。
哈希表 JDK8之前,哈希表 = 数组+链表
JDK8开始,哈希表 = 数组+链表+红黑树
哈希表存储元素的过程 根据hashCode值计算元素存放的位置 如果这个位置没有元素,直接存储 如果这个位置有元素调用equals比较 equals()为false,存储 equals()为true,不存储(认为是相同的元素)
自定义元素除重复元素:重写对象的hashCode()和equals()方法。
底层原理:依然是基于哈希表(数组、链表、红黑树)实现的。 但是,它的每个元素都额外的多了一个双链表的机制记录它前后元素的位置。
有序、不重复、无索引
特点:不重复、无索引、可排序(默认升序排序 ,按照元素的大小,由小到大排序) 底层是基于红黑树实现的排序。
TreeSet集合存储自定义类型的对象时,必须指定排序规则,支持如下两种方式来指定比较规则。 方式一
让自定义的类实现Comparable接口,重写里面的compareTo方法来指定比较规则。
方式二
通过调用TreeSet集合有参数构造器,可以设置Comparator对象(比较器对象,用于指定比较规则)。
如果认为第一个元素 > 第二个元素 返回正整数即可。 如果认为第一个元素 < 第二个元素返回负整数即可。 如果认为第一个元素 = 第二个元素返回0即可,此时Treeset集合只会保留一个元素,认为两者重复。
Map是双列集合的祖宗,它的功能是全部双列集合都可以继承过来使用的。
根据键值对进行存储。
方法名称 | 说明 |
public V put(K key,V value) | 添加元素 |
public int size() | 获取集合的大小 |
public void clear() | 清空集合 |
public boolean isEmpty() | 判断集合是否为空,为空返回true , 反之 |
public V get(Object key) | 根据键获取对应值 |
public V remove(Object key) | 根据键删除整个元素 |
public boolean containsKey(Object key) | 判断是否包含某个键 |
public boolean containsValue(Object value) | 判断是否包含某个值 |
public Set<K> keySet() | 获取全部键的集合 |
public Collection<V> values() | 获取Map集合的全部值 |
特点:无序、不重复、无索引;
哈希表 JDK8之前,哈希表 = 数组+链表
JDK8开始,哈希表 = 数组+链表+红黑树 哈希表是一种增删改查数据,性能都较好的数据结构。
特点:(由键决定特点): 有序、不重复、无索引。
底层原理:底层数据结构依然是基于哈希表实现的,只是每个键值对元素又额外的多了一个双链表的机制记录元素顺序(保证有序)。
特点:由键决定特点:按照键的大小默认升序排序、不重复、无索引。
由键决定特点:按照键的大小默认升序排序、不重复、无索引。
TreeMap集合同样也支持两种方式来指定排序规则
让类实现Comparable接口,重写比较规则。
TreeMap集合有一个有参数构造器,支持创建Comparator比较器对象,以便用来指定比较规则。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。