java基础06集合
2021/4/13 20:25:52
本文主要是介绍java基础06集合,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
集合
1.Collection
1.1 方法
add(T v) isEmpty() clear() contains(Object obj) remove(Object obj) size() toArray()
1.2 List
存放一组单值
有序,可重复,索引
1.2.1 ArrayList
ArrayList是长度可变的对象引用数组,称为动态数组
数组容量也会随之自动扩展;访问和遍历数组元素时,ArrayList的性能优越
ArrayList类继承了AbstractList类并实现了List接口
方法:
get(int index); remove(int index);
1.2.2 LinkedList
LinkedList类用于创建链表数据结构
数量不受任何限制
频繁地添加和删除元素,LinkedList的性能更加优越
LinkedList类继承了AbstractSequentialList类,并实现了List接口
方法:
add(); remove(); get()
1.2.2+ Queue
LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用
方法:
Queue<String> queue = new LinkedList<String>();
queue.offer("a");//添加元素
queue.poll();//返回第一个元素,并在队列中删除
queue.element();//返回第一个元素
queue.peek();//返回第一个元素
1.2.3 Vector
Vector是线程同步的
Vector类继承于AbstractList类,并实现了List接口
1.2.3+Stack
栈是Vector的一个子类,它实现了一个标准的后进先出的栈
方法:
peek( ); pop( ); push(Object element);
int search(Object element);//返回对象在堆栈中的位置,以 1 为基数。
1.2.4 比较
常用实现类 | 新增/查询/删除 | 底层数据结构 |
---|---|---|
ArrayList<E>(常用) | 查询最快 | 动态数组 |
LinkedList<E> | 新增/删除最快 查询慢 | 双向链表 |
Vector<E> | 三者都慢 | 动态数组 |
1.3 Set
存放单值
无序,不可重复,无索引
1.3.1 HashSet
实现Set接口,由哈希表(实际为HashMap实例)支持
无序,允许null元素
1.3.2 LinkedHashSet
是HashSet的子类,方法几乎与父类一致
元素有序(元素插入顺序与遍历顺序是一致的)
1.3.3 TreeSet
元素有序(会按照自然顺序进行排列)规定元素数据类型必须实现Comparable接口
1.3.4 SortedSet
TreeSet类实现SortedSet接口
SortedSet<String> animals = new TreeSet<>();
方法:
comparator() - 返回一个比较器,可用于对集合中的元素进行排序
first() - 返回集合的第一个元素
last() - 返回集合的最后一个元素
headSet(element) - 返回指定元素之前的所有元素
tailSet(element) - 在指定元素之后(包括指定元素)返回集合中的所有元素
subSet(element1,element2) - 返回element1和element2之间的所有元素,包括element1
1.3.5 总结
常用实现类 | 底层数据结构 | 线程安全 | 元素是否可以为null |
---|---|---|---|
HashSet<E> (推荐) | Hash表 | 不安全 | 可以为null |
LinkedHashSet<E> | 链表+hash表 | 不安全 | 可以为null |
TreeSet<E> | 红黑树 | 不安全 | 不能为null |
2.Map
将键映射到值的对象。 Map不能包含重复的键; 每个键可以映射到最多一个值
2.1 HashMap
size(); isEmpty(); clear(); put(); remove(); get(); containsKey(); containsValue();
HashMap可以允许存在一个为null的key和任意个为null的value
2.2 LinkedHashMap
LinkedHashMap元素可以预测的 key 插入的顺序与遍历顺序一致
2.3 TreeMap
TreeMap key值有序 按照自然顺序对key进行排列
2.4 HashTable
HashTable继承Dictionary类,实现Map接口
HashTable中的key和value都不允许为null
2.5 ConcurrentHashMap
ConcurrentHashMap 是线程安全且高效的HashMap
2.6 总结
实现类 | 底层数据结构 | 线程是否安全 | K与V是否可以为null |
---|---|---|---|
HashMap<K,V>(推荐) | hash表 | 否 | K和V 都可以为null |
LinkedHashMap<K,V> | 链表+hash表 | 否 | K和V 都可以为null |
TreeMap<K,V> | 红黑树 | 否 | K不可以为null , V可以 |
CouncurrentHashMap<K,V>(推荐) | 1.7 锁分段 1.8 CAS | 是 | K和V都不可以为null |
HashTable<K,V> | hash表 | 是(同步) | K和V都不可以为null |
3.集合排序
3.1 Collections类
Collections类仅由静态方法组合或返回集合
//排序
static <T extends Comparable<? super T>> void sort(List<T> list)
static <T> void sort(List<T> list, Comparator<? super T> c)
//重排洗牌
static void shuffle(List<?> list)
//最大/最小
static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp)
static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)
static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp)
3.2 Set排序
只能针对TreeSet元素排列(要求Treeset集合元素类型都必须实现Comparable)
3.3 Map排序
只能针对TreeMap元素排列(要求map的key值类型都必须实现Comparable)
4.Stream
在遍历集合元素执行删除,修改或者新增功能,会出现并发修改的异常,jdk1.8之后,弥补了这个缺陷,提供了对集合元素的并行化操作
Stream stream = list.stream(); 每次用完之后,就自动关闭流
list.stream(): 获取流 distinct:去重复 collect:转换回集合 Collectors.toList():创建了一个空的集合,存储去重复流之后的集合
filter 过滤,获取的false过滤
Map<Integer, String> map = list.stream().distinct().collect(Collectors.toMap(User::getId, User::getName));//将list转换成map
这篇关于java基础06集合的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28微服务架构中API版本控制的实践
- 2024-09-28AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
- 2024-09-27Sentinel配置限流资料:新手入门教程
- 2024-09-27Sentinel配置限流资料详解
- 2024-09-27Sentinel限流资料:新手入门教程
- 2024-09-26Sentinel限流资料入门详解
- 2024-09-26Springboot框架资料:初学者入门教程
- 2024-09-26Springboot框架资料详解:新手入门教程
- 2024-09-26Springboot企业级开发资料:新手入门指南
- 2024-09-26SpringBoot企业级开发资料新手指南