java集合总结

来源:互联网 发布:家装网络布线图 编辑:程序博客网 时间:2024/06/05 07:03

关于java集合可以分为两类

  1. 单列集合(根接口Collection )
  2. 双列集合(分根接口Map)

1、单列集合

| Collection 单列集合的根接口
—-| List 实现了List接口的集合类,具备的特点: 有序,可重复
——–| ArrayList ArrayList 底层是维护了一个Object数组实现 的, 特点: 查询速度快,增删慢,是线程不同步的,操作效率高,线程不安全
——–| LinkList 是实现了链表的数据结构实现的,查询速度慢,增删块.这个集合同时模拟了堆栈的存储结构(提供push()/pop()方法),和队列的存储结构(提供offer()/poll())
——–| Vector 底层维护了一个Object数组实现的,Vector是同步的,线程安全的。
—-| Set 如果实现了Set接口的集合类,具备特点:无序、不可重复
——–| HashSet 底层使用了Hash表来实现,存取速度快。
——–| TreeSet 若果元素具备自然顺序的特征,那么就按照元素自然顺序的特征进行存储。

HashSet存储的原理

实际HashSet底层是构建了一个HashMap实现的,key值就是添加的set的元素值,value值是static final Object PRESENT = new Object();

TreeSet实现原理

TreeSet可以根据元素自然顺序进行排序,如果元素不具备自然顺序,则元素必须实现Comparable结构,并重写compareTo()方法,确定元素之间的比较规则。
TreeSet底层是使用红黑树,也就是二叉树实现。左小右大

实际TreeSet底层是调用TreeMap实现

2、双列集合

| Map 双列集合的根接口,存储数据都是键值对形式,键不可重复,值可重复
—–| HashMap HashMap是一个以Entry<K,V>为类型的数组,数组的每个元素是一个链表,线程不安全。
—–| TreeMap 底层数据结构是基于红黑树实现(当key值不具有自然顺序时必须实现comparable接口)
—–| Hashtable 较早版本的jdk的集合,原理和HashMap类似,都是实现一个Entry<K,V>为类型的数组,是线程同步的,速度慢,已经不用了

Map接口中的方法

void clear(); // 移除map中所有数据boolean containsKey(Object key);// 如果map中含有key值返回true,否则falseboolean containsValue(Object value);// 如果map中含有一个或多个value值,则返回trueSet<Map.Entry<K,V>> entrySet();//返回一个set集合,元素时Map.Entry对象,map中所有key、value值封装在Map.Entry对象中boolean remove(Object key, Object value); // 移除map中key值和value值和给定相等的键值对boolean replace(K key, V oldValue, V newValue);// 替换map中key值,仅仅当对应的value值为oldValue时,替换为newValue,替换成功返回trueV remove(Object key);// 移出key值对应的项int size();V get(Object key); // 根据键获取相应的值Set<K> keySet();  // 将key值存放在Set中(因为键值是唯一的)Collection<V> values(); // 将value值存放在Collection中

3、集合工具类

Collections集合的工具类,针对List集合

排序

Collections.sort(list)      // 可以实现对list进行排序

按照list中元素的自然顺序排序,当元素没有自然顺序,则必须提供一个比较器,需要传入一个匿名内部类,实现Comparator比较器接口。

查找

Collections.binarySearch(list,key)  // 二分查找,寻找索引值,元素具有自然顺序Collections.binarySearch(list,key,Comparator)   // 元素不具备自然顺序时,需要传入一个比较器
Collections.max(list);          // 查找集合最大值Collections.max(list,Comparator);       // 不具备自然顺序时

反转

Collections.reverse(list);

转换为线程安全的工具类

返回一个线程安全的集合

LinkedList<Integer> li = (LinkedList<Integer>) Collections.synchronizedList(list);