List 接口及实现类
Set 接口
Map 接口
Collections类
文章目录
前言
集合的框架
一、集合是什么?
是一个存储对象的容器。(java中万物皆对象)。
集合:变长容器,只能存储引用数据类型,可以存储不同类型的元素,但是为了方便对集合中的元素进行遍历等操作,一般存储同一类型。虽说集合只能存储引用数据类型,但是在存储基本数据类型时可以通过自动装箱将基本数据类型转换为基本数据类型包装类,集合可以存储基本数据类型也可以存储引用数据类型。(数组实际上也是一个集合。是定长容器,可以存储基本数据类型和引用数据类型(即所有数据类型都可以存),数组中的元素类型必须统一。)
二、划分
单列:Collection
定义:单列集合中的顶级接口,里面定义了单列集合共有的方法。
方法主要有增、删、改、查、判断为主
代码如下(示例):
Collection<String> c = new ArrayList<>(); //创建对象boolean add(Object element); //增boolean remove(Object element);//删void clear(); //清空集合元素int size(); //长度boolean isEmpty(); //是否为空boolean contains(Object element); //是否包含boolean retainAll(Collection c); 求交集 , 集合数据发生变化返回 true, 不变返回false
Set 中的数据对象没有顺序且不可以重复。
List 中的数据对象有顺序且可以重复。
LIst:有序
List继承了Collection接口,有三个实现的类
-
ArrayList
数组列表,数据采用数组方式存储。
add(int index, E element)get(int index)indexOf(Object o)lastIndexOf(Object o)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()offer()//将指定元素添加到此列表尾部poll()//检索并删除此列表的头
-
Vector
数组列表,添加同步锁,线程安全的
Set:无序、不可存储重复元素
三种遍历:
1.for循环遍历
for (int i = 0; i <list.size() ; i++) { if (list.get(i).equals("a")){ list.remove(i); } } //遍历集合时,可删除元素 删除元素后,元素向前移动,索引++,有可能会出现错漏问题
2.增强for循环的遍历
for (String s:list ) { if (s.equals("d")){ list.remove(s); } } //遍历过程不能删除元素,否则会抛出并发修改异常
3.迭代器遍历(Iterator)
//只可在list中用 Iterator iterator(); //返回一个ArraList中的内部内对象,实现Iterator接口 Iterator<Stringt> it = list.iterator while(it.hasNext()){ if (e.equals("d")){ it.remove(); } } hasNext(); //判断集合是否还有元素 有返回true 无返回false
HashSet:存储的元素顺序不固定,不可存储重复元素
HashSet类中的元素不能重复,即彼此调用equals方法比较,都返回false。
底层数据结构是哈希表+链表 哈希表依赖于哈希值存储
TreeSet:可按照元素的自然顺序排列
可以给Set集合中的元素进行指定方式的排序。存储的对象必须实现Comparable接口。
TreeSet底层数据结构是二叉树(红黑树是一种自平衡的二叉树)
双列:Map
代码如下(示例):
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<Map.Entry<K,V>> entrySet()
HashMap(键无序)
HashMap中元素的key值不能重复,排列顺序是不固定的,可以存储一个 为null的键。
TreeMap
TreeMap中所有的元素都保持着某种固定的顺序,如果需要得到一个有序的Map就应该使用TreeMap,key值所在类必须实现Comparable接口。(通过键进行排序,有自平衡,键不能重复,键可以排序必须实现排序接口)
HashTable(线程安全的map)
实现了同步。 不能存储为null的键
Collections
Collections
是集合类的工具类,与数组的工具类
Arrays
类似
.
addAl l(Col lection<? super T> c, T... elements);
binarySearch(List<? extends Comparable<? super T>> l ist, T key)
sort(List<T> l ist)
sort(List<T> l ist, Comparator<? super T> c)
swap(List<?> l ist, int i, int j)
copy(List<? super T> dest, List<? extends T> src) ;
注意
dest size
需大于等于
src.size
emptyList()
返回为空的集合
,
不能添加数据
fi l l(List<? super T> l ist, T obj)
max(Col lection<? extends T> col l)
min(Col lection<? extends T> col l)
replaceAl l(List<T> l ist, T oldVal, T newVal)
reverse(List<?> l ist)
shuffle(List<?> l ist)
随机排序
copy(dest,src)
集合复制