第十八天学习java

总结

ArrayList

  • ArrayList(实现List接口):

    1. 底层基于数组,可以存储不同类型可重复的多个数据(包括null)并且是有序的(输入和输出的结果一致)
    2. 他是线程不安全,线程安全的方式:List list = Collections.synchronizedList(new ArrayList(…));
    3. jdk1.6他的初始容量是10,jdk1.8初始容量是0
    4. 他实现RandomAccess,可以随机访问
  • ArrayList方法:

    ​ add addAll clear clone contains

    ​ get indexOf isEmpty remove set

    ​ size toArray

    ​ Arrays中的asList

  • ArrayList遍历:

    1. 普通for循环
    2. 增强for循环
    3. 迭代器

LinkedList

  • LinkedList:
    1. 底层基于双向链表,可以存储多种类型数据的多个数据(可重复)并且是有序的,包括null
    2. 线程不安全,安全的方式: List list = Collections.synchronizedList(new LinkedList(…));
    3. 不能随机访问
  • ArrayList方法:
    1. addFirst addLast peek poll pop push
    2. 其他的方法和ArrayList一致
  • LinkedList遍历:
    1. 普通for循环
    2. 增强for循环
    3. 迭代器

LinkedList和ArrayList的区别

  • 相同点

    1. 两个都可以存储不同类型多个数据(包括null),并且是有序可重复,
    2. 初始容量都是0
    3. 都是线程不安全
  • 不同点

    1. ArrayList底层是基于数组的,LinkedList底层是基于双向链表的
    2. ArrayList有索引,所以检索和修改效率很高,但是随机增删效率不行,会牵扯到数组的创建和复制
    3. LinkedList没有索引,检索和修改效率不行(需要遍历整个链表),但是随即增删效率高
    4. 这些都是基于大量数据,少量数据大家都差不多

HashSet

  • HashSet:

    1. 底层基于HashMap
    2. 其中的数据无序不可重复,可以有null
    3. 线程不安全,线程安全方式:Set s = Collections.synchronizedSet(new HashSet(…));
  • HashSet遍历(没有提供输入索引获取元素的方法):

    1. forech
    2. 迭代器
  • HashSet的去重规则:

    1. 先通过hashcode比较,如果相同,再用equals比较
    2. 重写hashcode方法:将两个的hash值相加返回
    3. 重写equals方法:将两个对象的属性比较的布尔值返回

TreeSet

  • TreeSet:

    1. 底层基于TreeMap
    2. 无序不可重复,不能有null
    3. 可以存储任意类型,但是只能是一种类型,否则报错
    4. 线程不安全,线程安全方式:SortedSet s = Collections.synchronizedSortedSet(new TreeSet(…));
    5. 放入的数据如果没有实现Comparable或者没有加入比较器会报错
  • TreeSet遍历:

    1. 增强for循环
    2. 迭代器
  • 定制排序方式:

    ​ 让TreeSet添加的时候按照自己的方式排序

    • 自然排序:

      1. 让自己要添加的类实现Comparable接口

      2. 重写compareTo方法 返回值:0 表示比较的类型一样保留一个

        ​ 正数 降序

        ​ 负数 升序

    • 定制排序:

      1. 自己写一个比较器,放入TreeSet有参构造中
      2. 自己写的类实现Comparator接口,重写compare方法 两个值相减
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页