**集合与数组
数组中既可以放基本数据类型,也可以放引用数据类型。
集合中只能放引用数据类型,不能放基本数据类型;基本数据类型需要使用包装类来包装,然后再放入集合。

1.List集合
存储一组不唯一,有序(索引顺序)的对象。
主要有ArrayList和Linkedlist两个实现类。

2.ArrayList
在内存中分配连续的空间,实现了长度可变的动态数组。比常规的数组更加灵活,常规的数组要先定义长度,在实际应用过程中不方便。
优点:遍历元素和随机访问元素的效率比较高。
缺点:添加和删除需要大量移动元素效率低,按照内容查询效率低。

3.LinkedList
采用双向链表存储方式。
优点:插入、删除元素效率比较高(前提必须先低效率查询,如果插入删除发生在头尾可以减少查询次数)。
缺点:遍历和访问元素效率低下。

4.ArrayList用法
1>创建一个集合对象

ArrayList list=new ArrayList();

2>添加元素(这里的元素添加都是在末尾添加元素)

list存mysql什么类型 list存放list_链表

list.add(1001);
        list.add(1002);
        list.add(998);

3>向指定的索引添加元素

list存mysql什么类型 list存放list_list存mysql什么类型_02

public class TestArrayList {
    public static void main(String[] args) {
        //创建一个集合对象
        ArrayList list=new ArrayList();
        //添加元素(在末尾添加)
        list.add(1001);
        list.add(1002);
        list.add(998);
        //向指定的索引添加元素
        list.add(3,888);
        System.out.println(list);
    }
}

注意:这里的索引不能超出当前 list 中的数量。
4>将list2中的所有元素添加到list1
list1.addAll(list2);

public class TestArrayList {
    public static void main(String[] args) {
        //创建一个集合对象
        ArrayList list1=new ArrayList();
        //添加元素(在末尾添加)
        list1.add(1001);
        list1.add(1002);
        list1.add(998);
        //将list2中的所有元素添加到list1
        ArrayList list2=new ArrayList();
        list2.add(11);
        list2.add(22);
        list2.add(33);
        list1.addAll(list2);
        System.out.println(list1);
    }
}

5>查看元素的数量

System.out.println(list.size());

5>获取指定索引元素

list存mysql什么类型 list存放list_list存mysql什么类型_03


6>根据元素找到对应的角标

list存mysql什么类型 list存放list_链表_04

public class TestArrayList {
    public static void main(String[] args) {
        //创建一个集合对象
        ArrayList list1=new ArrayList();
        //添加元素(在末尾添加)
        list1.add(1001);
        list1.add(1002);
        list1.add(998);
        list1.add("Hello");
        list1.add("World");
        System.out.println(list1);
        //获取指定索引的元素
        System.out.println(list1.get(1));
        //获取元素的下标
        System.out.println(list1.indexOf(1001));

运行结果:

list存mysql什么类型 list存放list_arraylist_05

7>删除元素

根据索引删除元素

list存mysql什么类型 list存放list_链表_06

public class TestArrayList {
    public static void main(String[] args) {
        //创建一个集合对象
        ArrayList list1=new ArrayList();
        //添加元素(在末尾添加)
        list1.add(1001);
        list1.add(1002);
        list1.add(998);
        System.out.println(list1);
        list1.remove(0);
        System.out.println(list1);
    }
}

运行结果:

list存mysql什么类型 list存放list_链表_07


8>遍历

方法一:for循环

for (int i=0;i<list1.size();i++){
            System.out.println(list1.get(i));
        }

方法二:for-each循环

for(Object element1:list1){
            System.out.println(element1);
        }

方法三:迭代器Iterator

Iterator iterator=list1.iterator();
        while (iterator.hasNext()){//是否还有数据
            System.out.println(iterator.next());
        }

方法四:Lambda表达式+流式编程(JDK1.8)

list1.forEach((i) -> System.out.println(i));

5.LinkedList用法与ArrayList基本一样
多了一些用法
比如addFirst()和addLast()方法
addFirst ()=add(index=0, )
addLast ()=add();

public static void main(String[] args) {
        //创建一个集合对象
        LinkedList list1=new LinkedList();
        //添加元素(在末尾添加)
        list1.add(1001);
        list1.add(1002);
        list1.add(998);
        list1.add("Hello");
        list1.add("World");
        System.out.println(list1);
        list1.addFirst("first");
        list1.addLast("last");
        System.out.println(list1);

        list1.add(0,"头部");
        list1.add("尾部");
        System.out.println(list1);

运行结果:

list存mysql什么类型 list存放list_链表_08