首页 / JAVA / java基础06集合
java基础06集合
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java基础06集合,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4227字,纯文字阅读大概需要7分钟。
内容图文
![java基础06集合](/upload/InfoBanner/zyjiaocheng/593/20ec0445dfce40ffb71576fd99937d6a.jpg)
集合
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集合全部内容,希望文章能够帮你解决java基础06集合所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。