目录
List (有顺序且可以重复)继承collection接口并且可以实现三个类ArrayList,LinkList,Vector
Set接口实现类的集合,不可以存储重复元素,添加时,会自定的判断,有的是无序,有的是有序的
集合:数据保存并且可以动态增长长度的容器
内容:
collection接口(单列集合): List,Set
List (有顺序且可以重复)继承collection接口并且可以实现三个类ArrayList,LinkList,Vector
- ArrayList数组列表,数据采用数组方式存储。
创建方式:
ArrayList<T> arrayList=new ArrayList();
扩容方式:创建新数组长度为原来1.5倍将原数组复制过去
ArrayList与LinkedList比较:连续,有索引查询快直接通过下标获取指定位置的元素,中间删除添加慢 删除后其他元素要进行位移.
方法:
返回值 | 方法 | 方法作用 |
boolean | add(E e) | 将指定的元素追加到此列表的末尾。 |
void | add(int index,E element) | 在此列表中的指定位置插入指定的元素。 |
boolean | addAll(int index, Collection<? extends E> c) | 将指定集合中的所有元素插入到此列表中,从指定的位置开始。 |
void | clear() | 从列表中删除所有元素。 |
boolean | contains(Obiect o) | 如果此列表包含指定的元素,则返回 true 。 |
E | get(int index) | 返回此列表中指定位置的元素。 |
int | indexOf(Object o) | 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则回-1。 |
boolean | isEmpty() | 如果此列表不包含元素,则返回 true 。 |
Iterator<E> | iterator() | 以正确的顺序返回该列表中的元素的迭代器。 |
int | LastIndexOf(Object o) | 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 |
E | remove(int index) | 删除该列表中指定位置的元素。 |
Obiect[] | toArray() | 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。 |
E set(int index, E element) 用指定的元素替换此列表中指定位置的元素。
int size() 返回此列表中的元素数。
-LinkedList链表结构
创建方式:LinkedList<T> linkedList =new LinkList();
扩容机制:每一个数据存储在一个Node类中 Node节点链表结构,对外只提供头,尾节点,也没有扩容的机制,就是一直在前面或者后面新增就好。
LinkedList与ArrayList比较:中间删除添加快,查询慢
方法:
boolean add(E e) 将指定的元素追加到此列表的末尾。
void add(int index, E element) 在此列表中的指定位置插入指定的元素。
boolean addAll(Collection<?extends E> c) 按照指定集合的迭代器返回的顺序将指定集合中的所有元素追加到此列表的末尾。
void addFirst(E e) 在该列表开头插入指定的元素。
void addLast(E e)将指定的元素追加到此列表的末尾。
void clear() 从列表中删除所有元素。
boolean contains(Object o)如果此列表包含指定的元素,则返回 true 。
E element() 检索但不删除此列表的头(第一个元素)。
E get(int index)返回此列表中指定位置的元素。
E getFirst() 返回此列表中的第一个元素。
E getLast() 返回此列表中的最后一个元素。
int indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
boolean offer(E e) 将指定的元素添加为此列表的尾部(最后一个元素)。
boolean offerFirst(E e) 在此列表的前面插入指定的元素。
boolean offerLast(E e) 在该列表的末尾插入指定的元素。
E remove() 检索并删除此列表的头(第一个元素)。
E remove(int index) 删除该列表中指定位置的元素。
boolean remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。
E removeFirst() 从此列表中删除并返回第一个元素。
E removeLast() 从此列表中删除并返回最后一个元素。
E set(int index, E element)用指定的元素替换此列表中指定位置的元素。
int size() 返回此列表中的元素数。
-Vector数组列表
,添加同步锁,线程安全的
数组列表(线程安全的)
List接口遍历方式
1.增强for循环时,不允许删除元素
2.通过迭代器进行遍历
iterator();
listIterator();
注意:普通的for循环 允许删除元素,但是需要注意元素的移动,以及索引的变化(可以用i--等调节)
Set接口实现类的集合,不可以存储重复元素,添加时,会自定的判断,有的是无序,有的是有序的
Hashset(无序):
底层数据结构:哈希表+链表
创建方式:Hashset<T> hashset=new Hashset();
不可以存储重复元素方法:调用hashCode()方法计算hash值 当hash值相同时,再调用equals()方法判断内容是否相同,保证了安全
方法:
boolean add(E e) 将指定的元素添加到此集合(如果尚未存在)。
void clear() 从此集合中删除所有元素。
boolean contains(Object o) 如果此集合包含指定的元素,则返回 true 。
boolean isEmpty() 如果此集合不包含元素,则返回 true 。
Iterator<E> iterator() 返回此集合中元素的迭代器。
boolean remove(Object o) 如果存在,则从该集合中删除指定的元素。
int size() 返回此集合中的元素数(其基数)。
Treeset:(有序:是按照元素的自然顺序进行排序)
底层数据结构:二叉树(红黑树)
创建方式:Treeset<T> treeset=new Treeset();
不可以存储重复元素方法: set中添加的元素的类中实现Comparable接口,进行比较大小进行排序
方法:
boolean add(E e) 将指定的元素添加到此集合(如果尚未存在)。
boolean addAll(Collection<? extends E> c) 将指定集合中的所有元素添加到此集合中。
E ceiling(E e) 返回此集合中最小元素大于或等于给定元素,如果没有此元素,则返回 null 。
void clear() 从此集合中删除所有元素。
boolean contains(Object o) 如果此集合包含指定的元素,则返回 true 。
Iterator<E> descendingIterator() 以降序返回该集合中的元素的迭代器。
E floor(E e) 返回此集合中最大的元素小于或等于给定元素,如果没有这样的元素,则返回 null 。
E higher(E e) 返回严格大于给定元素的该集合中的最小元素,如果没有此元素则返回 null 。
boolean isEmpty() 如果此集合不包含元素,则返回 true 。
Iterator<E> iterator() 以升序返回该集合中的元素的迭代器。
E lower(E e) 返回这个集合中最大的元素严格小于给定的元素,如果没有这样的元素,则返回 null 。
E pollFirst() 检索并删除第一个(最低)元素,或返回 null如果该集合为空。
E pollLast() 检索并删除最后一个(最高)元素,如果此集合为空,则返回 null 。
boolean remove(Object o) 如果存在,则从该集合中删除指定的元素。
int size() 返回此集合中的元素数(其基数)。
set接口遍历方式:
增强for循环
注意:因为set集合,元素没有索引,索引就不能使用普通的for
迭代器遍历 iterator();
map接口(双列集合)
概述:将键映射到值的对象一个映射不能包含重复的键每个键最多只能映射到一个值
Hashmap
特点:HashMap中元素的key值不能重复, 排列顺序是不固定的,可以存储一个为null的键。
创建方式:THashmap<T,T> hashmap=new Hashmap();
底层结构:
1. 哈希表(数组):锁定元素位置
2.链表,红黑树:存储数据
方法:
void clear() 删除所有的键值对。
boolean containsKey(Object key) 包含指定键的值,则返回 true 。
V get(Object key) 返回到指定键所映射的值,或 null如果此映射包含该键的映射。
V put(K key, V value) 将指定的值与此映射中的指定键相关联。 (添加键,值)
V remove(Object key) 删除指定键的值(如果存在)。
boolean remove(Object key, Object value) 移除键,值
int size() 返回此地图中键值映射的数量。
Treema
特点:TreeMap中所有的元素都保持着某种固定的顺序,如果需要得到一个有序
的Map就应该使用TreeMap,key值所在类必须实现Comparable接口。
创建方式:Treemap<T,T> treemap=new Treemap();
底层结构:二叉树(红黑树)
方法:
K ceilingKey(K key) 返回大于或等于给定键的 null键,如果没有此键,则返回 null 。
void clear() 删除所键值对。
boolean containsKey(Object key) 如果此映射包含指定键的值,则返回 true 。
K floorKey(K key)返回小于或等于给定键的最大键,如果没有这样的键,则返回 null 。
V get(Object key)返回到指定键所映射的值,或 null如果此映射包含该键的映射。
K higherKey(K key) 返回严格大于给定键的最小键,如果没有这样的键,则返回 null 。
K lastKey() 返回当前在此地图中的最后(最高)键。
K lowerKey(K key) 返回严格小于给定键的最大键,如果没有这样的键,则返回 null 。
V put(K key, V value) (添加键值对)。
V remove(Object key) 从此TreeMap中删除此键的值(如果存在)。
V replace(K key, V value) 只有当目标映射到某个值时,才能替换指定键的条目。
boolean replace(K key, V oldValue, V newValue) 仅当当前映射到指定的值时才能替换指定键的条目。
int size() 返回此地图中键值映射的数量。
HashTable
特点:实现了同步。不能存储为null的键
Map集合遍历
方式1:根据键找值
方式2:根据键值对对象找键和值
Collections类
概念:是集合类的工具类
方法:
boolean addAll(Collection<? super T> c, T... elements); 将所有指定的元素添加到指定的集合
int binarySearch(List<? extends Comparable<? super T>> list, T key) 搜索指定对象的指定列表。
sort(List<T> list) 根据其元素的natural ordering对指定的列表进行排序。
sort(List<T> list, Comparator<? super T> c) 根据指定的比较器引起的顺序对指定的列表进行排序。
swap(List<?> list, int i, int j)交换指定列表中指定位置的元素。
copy(List<? super T> dest, List<? extends T> src) ; 将所有元素从一个列表复制到另一个列表中。 注意 dest size需大于等于src.size
emptyList() 返回为空的集合,不能添加数据
fill(List<? super T> list, T obj) 用指定的元素代替指定列表的所有元素。
max(Collection<? extends T> coll) 根据其元素的自然顺序返回给定集合的最大元素。
min(Collection<? extends T> coll) 根据其元素的自然顺序返回给定集合的最小元素。
replaceAll(List<T> list, T oldVal, T newVal) 将列表中一个指定值的所有出现替换为另一个。
reverse(List<?> list) 反转指定列表中元素的顺序。
shuffle(List<?> list) 随机排序
泛型
定义:类型由原来的具体的类型参数化即参数化类型
特点:1.泛型的类型参数只能是类类型 2.泛型的类型参数可以有多个。3.如果没有定义具体类型,默认为Object
从泛型类派生子类:
子类也是泛型类,子类和父类的泛型类型要一致
class A<T> extends Demo<T>
子类不是泛型类,父类要明确泛型的数据类型
class A extends Demo<String>
泛型通配符:
1.类型通配符一般是使用"?"代替具体的类型实参。
2.类型通配符上限
类/接口<?extends 实参类型>
要求该泛型的类型,只能是实参类型,或实参类型的子类类型。
3.类型通配符下限
类/接口<?super 实参类型>
要求该泛型的类型,只能是实参类型,或实参类型的父类类型。
4.类型擦除
泛型信息只存在于代码编译阶段,在进入JVM之前,与泛型相关的信息会被擦除掉相应的类型就被替换成 Object 类型或者上限类型.