集合
容器--数组
数组特点:一组数据类型相同的元素集合
创建数组时,必须给定长度,而且一旦创建长度不能变。
一旦数组装满元素,需要创建一个新的数组,将元素复制过去
不方便:判断是否装满了,如果装满了,数组复制
如果我们从数组中间删除一个元素或者添加一个元素,需要移动后面的元素
集合概念
Java中为了解决数据存储单一的情况;提供了许多不同结构的集合类,让我们可以根据不同场景进行数据存储的选择;提供了数组实现的集合,链表实现的集合,哈希结构,树结构...
单列集合:一次放入一个值(对象)
Collection接口,定义了单列集合共有的方法
List:可以有重复元素
ArrayList 数组列表
底层有一个数组,可以动态扩展数组长度,并提供一个一系列方法操作
查询快
中间增加删除慢
LinkedList 链表,查询慢
插入、删除元素时效率比较高
Vector 数组列表,添加同步锁,线程安全的
Set不可以有重复元素
HashSet 元素不能重复
TreeSet 可以给Set集合中的元素进行指定方式的排序。存储的对象必须实现Comparable接口。
双列集合 Map
Collection接口
Collection 接口-定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式。
Set 中的数据对象不可以重复。
List 中的数据对象有顺序(添加顺序)且可以重复。
List 接口及实现类
List继承了Collection接口,有三个实现的类
ArrayList 数组列表,数据采用数组方式存储。
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素效率比较高
LinkedList 链表
LinkedList采用链表存储方式。插入、删除元素时效率比较高
Vector 数组列表,添加同步锁,线程安全的
ArrayList的常用方法
add(E element) 将指定的元素添加到列表的末尾
add(int index, E element)将指定的元素插入到列表中的指定位置
get(int index) 返回列表中指定位置的元素
indexOf(Object o) 返回元素第一次出现在列表中的索引,如果不存在则返回 -1
lastIndexOf(Object o) 返回元素最后一次出现在列表中的索引,如果不存在则返回 -1
remove(int index) 删除并返回指定位置元素
set(int index, E element) 用指定的元素替换列表中指定位置的元素
LinkedList的常用方法
add(int index,Object element)在指定位置插入指定元素
addFirist(Object element)在列表的开头添加指定元素
addLast(Object element) 在列表的末尾添加指定元素
get(int index)返回指定位置的元素
removeFirst()移除并返回第一个元素
removeLast()移除并返回最后一个元素
remove(int index)移除并返回指定位置的元素
getFirst()返回第一个元素
getLast()返回最后一个元素
List接口集合迭代
for循环遍历、增强for循环的遍历、迭代器遍历(Iterator)
ArrayList<String> arrayList =new ArrayList(); arrayList.add("a"); arrayList.add("b"); arrayList.add("c"); arrayList.add("d"); /* List 实现接口类/List集合遍历方式1:for循环 for(int i=0;i<arrayList.size();i++){ System.out.println(arrayList.get(1)); } */ for(int i=0;i<arrayList.size();i++){ if("a".equals(arrayList.get(i))){ arrayList.remove("a"); i--; } } System.out.println(arrayList); /* List 实现接口类/List集合遍历方式2:增强for循环 增强for循环遍历元素时不允许修改集合元素(删除,添加) */ for(String s:arrayList){ //arrayList.remove(s); System.out.println(s); //arrayList.add("1"); } System.out.println(arrayList); } /* List 实现接口类/List集合遍历方式3:使用迭代器遍历 */ //获得集合对象的迭代器对象 Iterator<String> it= arrayList.iterator(); while(it.hasNext()){ String s=it.next();//获取到下一个元素 if(s.equals("a")) { it.remove();//使用迭代器对象删除元素 } System.out.println(s); } ListIterator<String> listIterator=arrayList.listIterator(); while(listIterator.hasNext()){ System.out.println(listIterator.next());
Set接口
继承了Collection接口。
Set中所存储的元素是不重复的,但是是无序的, Set中的元素是没有索引的
Set接口有两个实现类
HashSet
HashSet类中的元素不能重复,元素是无序的
TreeSet
可以给Set集合中的元素进行指定方式的排序。存储的对象必须实现Comparable接口。
遍历方式
增强for循环
迭代器遍历
Map接口
概述
将键映射到值的对象; 一个映射不能包含重复的键; 每个键最多只能映射到一个值。
Map接口常用方法
V put(K key, V value): 将指定的值与指定的键关联在此映射中,如果之前存在与该键关联的值,则将其替换为新值,并返回之前与该键关联的值(如果没有则返回null)。
V remove(Object key): 从映射中移除指定键的映射关系,并返回与该键关联的值。如果键在映射中不存在,则返回null。
void clear(): 清空映射,移除所有的键值对。
boolean containsKey(Object key): 判断映射中是否包含指定的键。
boolean containsValue(Object value): 判断映射中是否包含一个或多个键到指定值的映射。
boolean isEmpty(): 判断映射是否为空,即是否不包含任何键值对。
int size(): 返回映射中键值对的数量。
V get(Object key): 返回指定键所映射的值,如果映射中不包含该键,则返回null。
Collection<V> values(): 返回映射中包含的所有值的集合。
Set<K> keySet(): 返回映射中包含的所有键的集合。
Set<Map.Entry<K, V>> entrySet():
返回映射中包含的所有键值对的集合(实际上是Map.Entry对象的集合),每个Map.Entry对象包含
一个键值对。
HashMap
HashMap中元素的key值不能重复, 排列顺序是不固定的,可以存储一个为null的键。 TreeMap TreeMap中所有的元素都保持着某种固定的顺序,如果需要得到一个有序的Map就应该使用TreeMap,key值所在类必须实现Comparable接口。 HashTable实现了同步。不能存储为null的键
Map集合遍历
方式1:根据键找值 获取所有键的集合 遍历键的集合,获取到每一个键 根据键找值 方式2:根据键值对对象找键和值 获取所有键值对对象的集合 遍历键值对对象的集合,获取到每一个键值对对象 根据键值对对象找键和值
TreeMap
适用于按自然顺序或自定义顺序遍历键(key)。 TreeMap根据key值排序,key值需要实现Comparable接口, 重写compareTo方法。TreeMap根据compareTo的逻辑,对key进行排序。 键是红黑树结构,可以保证键的排序和唯一性
Collections类
addAll(Collection<? super T> c, T... elements):
将指定的元素添加到指定的集合中。
binarySearch(List<? extends Comparable<? super T>> list, T key):
使用二分搜索算法在指定列表中查找指定元素的索引(如果存在)。列表必须根据元素的自然顺序
进行排序。
sort(List<T> list): 对列表进行排序,要求列表的元素必须实现Comparable接口并具有自然顺序。
sort(List<T> list, Comparator<? super T> c):
使用指定的比较器对列表进行排序。
swap(List<?> list, int i, int j): 交换列表中指定位置的元素。
copy(List<? super T> dest, List<? extends T> src):
将源列表中的元素复制到目标列表中。注意:目标列表的大小必须大于等于源列表的大小。
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): 将列表中所有等于oldVal的元素替换为newVal。
reverse(List<?> list): 反转列表中的元素顺序。
shuffle(List<?> list): 随机排列列表中的元素。
copy(dest, src): 复制集合,将源集合中的元素复制到目标集合中。