集合
集合体系概述
Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。
/ (接口) List(元素可以重复):类ArrayList,LinkedList,.......
/ (接口) Collection(单列)
/ \ (接口) Set(元素不可以重复):类HashSet,TreeSet,.......
集合
\ (接口) Map(双列) :类 HashMap, TreeMap,TableMap
Collection 接口
● Collection 接口-定义了存取一组对象的方法,其子接口Set和List分别定义
了存储方式。
● Set 中的数据对象没有顺序且不可以重复。
● List 中的数据对象有顺序且可以重复。
在Collection 中定义了一些集合中的共有方法:
boolean add(Object element); 添加元素
boolean addAll(Collection c); 往一个集合中添加另一个集合
boolean remove(Object element); 删除指定的元素
boolean removeAll(Collection c); 删除了c1在c中的内容
void clear(); 清空集合
int size(); 集合中的元素个数
boolean isEmpty(); 判断集合是否为空
boolean contains(Object element); 当前列表若包含某元素,返回结果为true, 若不包含该元素,返回false
boolean containsAll(Collection c); 是否包含指定集合中的所有元素
boolean retainAll(Collection c);求交集,集合数据发生变化返回true, 不变返回false
List 接口及实现类
● List继承了Collection接口,有三个实现的类
- ArrayList 数组列表,数据采用数组方式存储。
-LinkedList 链表
-Vector 数组列表,添加同步锁,线程安全的
ArrayList实现了长度可变的数组,在内存中分配连续的空间。
遍历元素和随机访问元素的效率比较高
LinkedList采用链表存储方式。插入、删除元素时效率比较高
ArrayList的常用方法
add(int index, E element) 在指定位置添加指定的元素
get(int index) 得到指定位置的元素
indexOf(Object o) 寻找指定的元素,返回值为list列表中首该个元素出现位置的索引,找不到时返回-1
lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引;如果此列表不包含该元素,则返回-1。
remove(int index) 删除并返回指定位置元素
removeRange(int fromIndex, int toIndex) 删除指定区间的元素(子类继承使用)
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)
Set 接口
● Set接口继承了Collection接口。
Set中所存储的元素是不重复的,但是是无序的, Set中的元素是没有索引的
● Set接口有两个实现类
● HashSet (注意在其中的元素是自己定义的类型时需要重写Hashsed方法和equals方法,这么到时比较的是内容的哈希值和内容)
HashSet类中的元素不能重复,即彼此调用equals方法比较,都返回false。
底层数据结构是哈希表+链表
哈希表依赖于哈希值存储
● TreeSet
可以给Set集合中的元素进行指定方式的排序。存储的对象必须实现Comparable接口。
TreeSet底层数据结构是二叉树(红黑树是一种自平衡的二叉树)
Map 接口
lMap接口概述 :
将键映射到值的对象
一个映射不能包含重复的键
每个键最多只能映射到一个值
Mapa接口常用方法
V put(K key,V value) 向集合中添加键值对
V remove(Object key) 删除指定的键值对
void clear() 清空集合
boolean containsKey(Object key)
boolean containsValue(Object value)
boolean isEmpty() 判断集合是否为空
int size() 集合的元素个数
V get(Object key) 通过传入的键得到对的值
Collection<V> values() 得到所有值组成的一个集合
Set<K> keySet() 将键转换成一个Set类型的集合
Set<Map.Entry<K,V>> entrySet() 将每一个键值对包装成一个Set集合中的元素
● HashMap
HashMap中元素的key值不能重复,
排列顺序是不固定的,可以存储一个
为null的键。
● TreeMap
TreeMap中所有的元素都保持着某种固定的顺序,如果需要得到一个有序
的Map就应该使用TreeMap,key值所在类必须实现Comparable接口。
● HashTable
实现了同步。
不能存储为null的键
Map集合遍历
l 方式1:根据键找值
• 获取所有键的集合
• 遍历键的集合,获取到每一个键
• 根据键找值
l 方式2:根据键值对对象找键和值
• 获取所有键值对对象的集合
• 遍历键值对对象的集合,获取到每一个键值对对象
• 根据键值对对象找键和值
● TreeMap
适用于按自然顺序或自定义顺序遍历键(key)。
TreeMap根据key值排序,key值需要实现Comparable接口,
重写compareTo方法。TreeMap根据compareTo的逻辑,对
key进行排序。
键是红黑树结构,可以保证键的排序和唯一性
Collections 集合处理的工具类,里面包含的都是静态的方法
public void 方法名(int a,int...c){方法体}
int...c可变长度的参数 本质是数组 ,一个参数列表只能含有一个可变长度参数的,并且只能放在参数列表的最后一位
方法的使用
● Collections是集合类的工具类,与数组的工具类Arrays类似.
<>前的list表示传入该静态方法的集合是list接口下的子类
addAll(Col lection<? super T> c, T... elements); 向一个实现collection接口类型的集合中添加于该集合类型相同的元素
binarySearch(List<? extends Comparable<? super T>> list, T key) 二分查找指定元素,先排序在查找
sort(List<T> list) 排序
sort(List<T> list, Comparator<? super T> c) 排序,但同时需要用匿名类实现Comparator接口的比较方法
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) 填充,将list中的元素全部填充为指定元素
max(Col lection<? extends T> col l) 返回集合中的最大值
min(Col lection<? extends T> col l) 返回集合中的最小值
replaceAl l(List<T> list, T oldVal, T newVal) 用新的值将集合中原来的指定值替换掉
reverse(List<?> list) 将集合逆序