Java集合
数据结构概念
1、数据结构三要素
- 逻辑结构
- 线性结构
- 线性表
- 栈
- 队列
- 非线性结构
- 树
- 图
- 集合
- 线性结构
- 存储结构(物理结构)
- 顺序存储
- 链式存储
- 索引存储
- 散列存储(哈希存储)
- 结构上的运算
2、线性表
n个类型相同数据类型元素的有限序列。
特点:
- 相同数据类型
- 序列(顺序性,元素之间存在顺序)
- 有限
物理结构:
- 顺序存储(数组)
- 链式结构(链表)
容器
在Java中,数组、集合都是对多个数据进行存储及操作的,相当于数据的容器。【内存层面的存储】
1、数组缺点
数组在创建时:
- 需要指定长度,长度确定不可更改。
- 需要声明类型,只能存储该类型数据。
数组在非数组尾部删除、增加元素时,需要移动大量元素,以保证数组有序性,效率低。
数组中存储元素的个数是无法获取的。
数组只能表示有序、可重复的情况,对于不可重复/无序的情况无法满足。
2、集合
2.1、Java集合结构
2.2、Collection系列【接口】
父接口Iterable:
Collection接口:
- 辅助方法【判断、继承】:
- contains(Object o)、containsAll(Collection<?> c)
- equals(Object o)、hashCode()
- isEmpty()
- iterator():继承自Iterable
- size()
- toArray(),toArray(T[] a)
- 处理操作:
- add(E e),addAll(Collection<? extends E> c)
- clear()、remove(Object o),removeAll(Collection<?> c)、retainAll(Collection<?> c)
- JDK1.8引入【default】:
- parallelStream()、stream()
- removeIf(Predicate<? super E> filter)
- spliterator():重写Iterable的spliterator()
- toArray(IntFunction<T[]> generator)
- 继承,未重写:forEach(Consumer<? super T> action)
2.2.1、List接口【可重复】
方法:
- JDK1.8引入:
- 静态方法【不可重写】:
- copyOf(Collection<? extends E> coll)
- of()重载:返回一个不可修改的list
- 空参
- 参数E:1~10个、可变参数列表
- 普通方法【可重写】:
- replaceAll(UnaryOperator operator)
- sort(Comparator<? super E> c)
- 重写:spliterator()
- 继承未重写:
- Collection:parallelStream, removeIf, stream, toArray
- Iterable:forEach
- 静态方法【不可重写】:
- 处理操作:
- add(E e),addAll(Collection<? extends E> c)、add(int index, E element),addAll(int index, Collection<? extends E> c)
- clear()、remove(int index),remove(Object o)、removeAll(Collection<?> c)、retainAll(Collection<?> c)
- get(int index)、indexOf(Object o),lastIndexOf(Object o)
- set(int index, E element)
- subList(int fromIndex, int toIndex)
- 辅助操作:
- contains(Object o),containsAll(Collection<?> c)
- equals(Object o),hashCode()
- isEmpty()
- iterator()、listIterator(),listIterator(int index)
- size()
- toArray(),toArray(T[] a)
ListIterator接口:
Iterator:
2.2.2、Set接口【不可重复】
方法:
- JDK1.8引入:
- 静态方法【不可重写】:和List接口方法一致,区别就是of()方法返回一个不可修改的Set
- 普通方法【可重写】:没有自己的default方法
- 重写:spliterator()
- 继承未重写:
- Collection:parallelStream, removeIf, stream, toArray
- Iterable:forEach
- 处理操作:
- add(E e),addAll(Collection<? extends E> c)
- clear()、remove(Object o),removeAll(Collection<?> c),retainAll(Collection<?> c)
- 辅助操作:
- contains(Object o),containsAll(Collection<?> c)
- equals(Object o),hashCode()
- isEmpty()
- iterator()
- size()
- toArray(),toArray(T[] a)
2.3、Map系列【接口】
Map接口:
内容:
- 静态内部接口Entry<K, V>
- 方法:
- JDK1.8引入:
- 静态方法【不可重写】:
- copyOf(Map<? extends K,? extends V> map)
- entry(K k, V v)
- of()重载:
- 空参
- 1~10对(K, V)组合
- ofEntries(Map.Entry<? extends K,? extends V>… entries)
- 普通方法【可重写】:
- compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction),
computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction),computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) - forEach(BiConsumer<? super K,? super V> action)
- getOrDefault(Object key, V defaultValue)
- merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
- putIfAbsent(K key, V value)
- remove(Object key, Object value)、replace(K key, V value),replace(K key, V oldValue, V newValue),replaceAll(BiFunction<? super K,? super V,? extends V> function)
- compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction),
- 静态方法【不可重写】:
- 处理操作:
- clear()、remove(Object key)
- get(Object key)
- put(K key, V value),putAll(Map<? extends K,? extends V> m)
- keySet()、values()
- 辅助操作:
- containsKey(Object key),containsValue(Object value)
- equals(Object o)【Object也是一个map】,hashCode()
- isEmpty()
- size()
- JDK1.8引入:
3、继承结构
(1)接口:
(2)Collection实现类
(3)Map实现类