Java教程

java基础06集合

本文主要是介绍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集合的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!