• java集合、hashMap实现key唯一
  • nio
  • neety
  • restful
  • 面向对象
  • aop
  • 索引
  • String
    。。。。。

脑图:

集合

容器:StringBuffered,数组,集合等(数据结构)

作用:操作多个对象:存储,检索,操作;

  • 数组和集合的比较:

    1. 长度的比较
      • 数组长度固定
      • 集合长度可变
    2. 存储的类型
      • 数组是存储一个类型元素的容器
      • 集合则可以存储多个类型元素
    3. 元素的数据类型
      • 数组可以存储基本数据类型,引用类型(对象类型)
      • 集合就只能存储引用类型(int之类的基本数据类型会自动装箱成Integer)
    4. 数组效率高; List 由于要维护额外内容,效率相对低一些
  • 八种基本数据类型(四个整数,两浮点,一字符,一布尔)--ref::

    byte:8位,有符号,默认为0;
    用在大型数组中节约空间,主要代替整数,其占用的空间只有 int 类型的四分之一;
    short:16位,有符号,默认为0;
    是int型变量所占空间的二分之一;
    int:32位、有符号,默认值是 0;
    long: 64 位、有符号,默认值是 0L;
    float:单精度、32位;
    double:双精度、64 位;
    boolean:boolean数据类型表示一位的信息;--true/false
    char:一个单一的 16 位 Unicode 字符;
  • 集合框架

    接口:
    1.表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。
    2.在面向对象编程语言中,接口通常用来形成规范。
    实现类:
    1.集合接口的具体实现,是重用性很高的数据结构。
    算法:
    1.用来根据需要对实体类中的对象进行计算,比如查找,排序。 
    2.同一种算法可以对不同的集合实现类进行计算,这是利用了“多态”。
    3.重用性很高。

  • Collection

    java集合父类Collection

    --Collection接口的常用方法

    1. 添加
      boole can add(Object obj):添加一个元素
      boolean addAll(Collection):添加一个集合的元素
    2. 删除
      void clear():移除所有的元素
      boolean remove(Object):移除一个元素
      boolean removeAll(Collection c):移除一个集合的元素
    3. 判断
      boolean contains(Object obj):判断集合是否包含该元素
      boolean containsAll(Collection c):判断集合中是否包含指定集合 c 的全部元素
      boolean isEmpty():判断集合元素个数是否为 0
    4. 获取
      Iterator<E> iterator():迭代器 
    5. 获取元素个数
      int size()
    6. 交集
      boolean retainAll(Collection c):移除此集合c中未包含的元素。返回是否发生变化(两个集合的交集)
    7. 数组操作
      Object[] toArray() 返回一个包含集合中所有元素的数组
      <T> T[] toArray(T[] a) 返回一个包含集合中所有元素的数组,运行时根据集合元素的类型指定数组的类型
    8. https://docs.oracle.com/javase/tutorial/collections/streams/index.html
  • AbstractCollection

    AbstractCollection 是 Java 集合框架中 Collection 接口 的一个直接实现类
    Collection 下的大多数子类都继承 AbstractCollection ,比如 List 的实现类, Set的实现类。

  • 集合遍历

    集合Collection同时继承了Iterable接口,用于遍历集合
    --Iterable方法

    public interface Collection<E> extends Iterable<E> 
    Collection<Person> persons = new ArrayList<Person>();
    Iterator iterator = persons.iterator();
    while (iterator.hasNext) { 
    System.out.println(iterator.next);  
    }

    --for-each方法

    Collection<Person> persons = new ArrayList<Person>();
    for (Person person : persons) { 
    System.out.println(person.name);  
    }  

    --Aggregate Operations 聚合操作

    https://docs.oracle.com/javase/tutorial/collections/streams/index.html
  • List

    集合重点1
    --有序(存储顺序和取出顺序一致),可重复(即可为null)

    public interface List<E> extends Collection<E>
    List 的数据结构就是一个数组(元素在存储时互不干扰,没有什么依赖关系,自然可以重复)。
    存储内容时直接在内存中开辟一块连续的空间,然后将空间地址与索引(下标)对应;
    List 接口的实现类在实现插入元素时,都会根据索引进行排列。

    --实现类

    ArrayList:
    1. 底层数据结构是数组。线程不安全。
    2. 数组查比增删容易,需要移动后面的元素
    3. 同步操作:List list = Collections.synchronizedList(new ArrayList(...));
    LinkedList:
    1. 底层数据结构是双向链表。线程不安全;
    2. 当插入、删除频繁时使用,只需要改变前后两个节点指针指向即可
    3. 所有指定位置的操作都是从头开始遍历进行的
    4. 同步操作:List list = Collections.synchronizedList(new LinkedList(...));
    Vector:底层数据结构是数组。线程安全

    --方法

    索引位置相关:get, set, add, addAll, remove
    元素搜索:indexOf, lastIndexOf(指定元素在 list 中的首次出现/最后一次出现的位置(获取 lastIndexOf 是通过倒序遍历查找))
    List 中如果想要根据两个对象的内容而不是地址比较是否相等时,需要重写 equals()和hashCode()方法(Set不可重复)
    扩容:
  • Set

    集合重点2
    --元素不可重复,equals()和hashCode()

    HashSet:底层数据结构是哈希表(是一个元素为链表的数组)
    TreeSet:底层数据结构是红黑树(是一个自平衡的二叉树),保证元素的排序方式
    LinkedHashSet:底层数据结构由哈希表和链表组成。

ref