0
点赞
收藏
分享

微信扫一扫

Java集合简介

49路末班车 2022-03-11 阅读 46

一、简介

1. 数组

  • 长度一开始就指定,不可变
  • 保存的数据类型必须为同一种元素
  • 数组的添加新元素比较费事
package com.erick.feature.collection.d01;

public class Demo01 {
    public static void main(String[] args) {
        addElementToArray();
    }

    private static void addElementToArray() {
        String[] originalArr = {"FIRST", "SECOND", "THIRD"};

        String[] newArr = new String[originalArr.length + 1];

        /*先把原来数组的数据复制过来*/
        for (int i = 0; i < originalArr.length; i++) {
            newArr[i] = originalArr[i];
        }

        newArr[newArr.length-1] = "FOURTH";

        for (int i = 0; i < newArr.length; i++) {
            System.out.println(newArr[i]);
        }
    }
}

2. 集合

  • 集合长度可变
  • api简单方便

2.1 单列集合

在这里插入图片描述

2.2 双列集合

在这里插入图片描述

3. 遍历

3.1 Iterable

  • 凡是实现了Collection接口的集合,都可以用Iterable来进行集合遍历
private static void searchCollection() {
   List<String> list = new ArrayList<>();
   for (int i = 0; i < 10; i++) {
       list.add("HELLO" + i);
   }

   Iterator<String> iterator = list.iterator();
   while (iterator.hasNext()) {
       /*指针向下移动一个,并返回上一个元素
       * 1. 快捷键: itit
       * 2. 如果后面需要再次遍历,需要重新获取iterator*/
       System.out.println(iterator.next());
   }
}

3.2 增强for

private static void forEach() {
    List<String> list = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        list.add("HELLO" + i);
    }

    /*增强for:
     * 1. 底层也是迭代器
     * 2  可以用来遍历数组*/
    for (String str : list) {
        System.out.println(str);
    }
}

3.3 普通for循环

二、 List

1. ArrayList

- 可以添加多个null元素
- 底层用数组来实现
- 非线程安全,但是效率高

1.1. 扩容机制

1. 底层维护了一个Object类型的数组 elementData
  transient Object[] elementData;  # 表示该属性不会被序列化

2. 当创建新的ArrayList时, 如果使用的无参构造器, 则elementData初始容量为0
   第一次添加,则扩容为10,  如果需要在此扩容,则扩容elementData 为1.5倍
   #0--10--15--22--33

3. 使用指定大小的构造器,则 elementData为指定大小
   如果需要扩容,则扩容为1.5 倍
   # 20-30-45

1.2 扩容实现

private static void copyArr(){
    String[] arr = {"FIRST", "SECOND", "THIRD"};
    System.out.println("arr地址:" + arr);

    /*将原来数组拷贝并扩容
     * 1. 数组的引用地址实际发生了变化
     * 2. 扩容后,会将原来数组中保存的数据拷贝下来
     * 3. ArrayList的低层的数组的扩容的实现*/
    arr = Arrays.copyOf(arr, 5);

    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }
    System.out.println("新的arr地址:" + arr);
}

2. Vector

举报

相关推荐

0 条评论