Java学习之==>集合体系(待续。。)

1、概述算法

Java的集合体系,本质上是一个陈放数据的容器,像以前学过的数组也是陈放数据的容器,但在 Java 中数组的长度是固定的,使用起来没那么方便。集合提供了更增强大的功能,使用起来也更方便和快捷。集合体系中提供的方法的底层源代码采用的也是优秀的高效率算法,其余数据容器能操做的,集合都能操做,并且代码更加简洁,思路更加清晰,运行的效率更加高。所以,彻底掌握完集合。编程的技能会进一步提升。编程

2、集合体系数组

集合做为一个容器,能够存储多个元素,可是因为数据结构的不一样,Java 提供了多种集合类,将集合类中共性的功能不断向上抽取,最终造成了集合体系结构。安全

Java中集合体系的关系图:数据结构

Collection:多线程

Map:ide

  • List、Set、Map 都是接口,List 和 Set 继承自 Collection 接口,Map 为独立接口;
  • AbstractCollection 做为 AbstractList、HashSet、TreeSet 的父类,实现自 Collection;
  • Set下有 HashSet、TreeSet、LinkedHashSet,LinkedHashSet 继承自 HashSet,实现自 Set,HashSet、TreeSet继承自 AbstractCollection 实现自Set;
  • List下有ArrayList、LinkedList、Vector,这三者继承自 AbstractList,而 AbstractList 继承自 AbstractCollection,实现自 List;
  • Map下有 AbstractMap、HashMap、TreeMap、LinkedHashMap;

3、Collection体系性能

一、Collection测试

  • 常见的方法有:add()、clear()、contains()、remove()等方法;
  • 从 Iterable 接口继承了 iterator() 和 splititerator() 方法;
  • 重要实现接口为 List、Set 和 Queue;

二、Listspa

存储特色:

  • 有序;
  • 可重复;

重要实现类:

  • ArrayList
  • LinkedList 

三、LinkedList

数据结构:

  • List是描述有序集合;
  • LinkedList是内部使用链表来实现的有序集合;

体系机构图:

四、ArrayList

数据结构

  • List是描述有序集合;
  • ArrayList是内部使用数组实现的有序集合;

体系结构图

ArrayList VS LinkedList

  • 使用彻底一致,由于实现自相同的接口List;
  • 场景略有区别(这一点不许确):?
    • ArrayList适合随机地操做(get,set)列表每一个元素(数组的特性)的场景?;
    • LinkedList适合插入和删除比较频繁的场景?;

ArrayList VS Vector

  • 内部实现基本一致,略微差别不过是我的的一些写法问题;
  • Vector是线程安全的,ArrayList是非线程安全的,在无线程安全须要的状况下,使用ArrayList;
  • 注: 通常列表的操做,多数是在线程内操做,所以涉及多线程的场景不是不少;

ArrayList 与 LinkedList 性能测试

咱们先来写下面一段测试代码:

/** * 自测下ArrayList与LinkedList在本地的机器上的性能 * * 主要是验证 LinkedList是否是全部数据都是删除和修改最快 * */
public class Topic1 { public static void main(String[] args) { List<Integer> list1 = new ArrayList<>(); long start = System.currentTimeMillis(); for (int i=0;i<=10000;i++){ list1.add(i); } long end = System.currentTimeMillis(); System.out.println("arraylist time:" + (end - start)); List<Integer> list2 = new LinkedList<>(); long start1 = System.currentTimeMillis(); for (int i=0;i<=10000;i++){ list2.add(i); } long end1 = System.currentTimeMillis(); System.out.println("linkedList time:" + (end1 - start1)); }
测试代码

咱们分别测试往 ArrayList 和 LinkedList 中添加 1万、10万、80万、100万条数据,查看其执行时间,运行结果以下:

到80万条数据时,ArrayList 用时已经比 LinkedList 少,只不过这时时间还比较接近。

以上结果分别表明1万、10万、80万、100万条数据的测试结果,到100万条数据时,ArrayList 所用时间远远少于 LinkedList。

因此,咱们说LinkedList适合插入和删除比较频繁的场景是不许确的,和数据量的大小有关。

4、Set

存储特色:

  • 无序;
  • 不可重复;

重要实现类:

  • HashSet;
  • LinkedHashSet;

一、HashSet

数据结构:

  • 散列集;

体系结构图:

二、LinkedHashSet

数据结构:

  • 散列集;

体系结构图:

5、Map

重要实现类

  • HashMap;
  • LinkedHashMap;
  • TreeMap;

Map体系结构图

 

未完待续。。。

相关文章
相关标签/搜索