Java入门:List集合

1List介绍:

List是Collection的子接口

在开发中一般使用List而不使用Collection,因为List不仅拥有Collection所有的方法,还有很多自己独有的方法

它是有序的可重复的。

1.1List独有的方法

1.2遍历List集合中的数据

1.2.1for循环

package com.ccx.Collection_1;

import java.util.ArrayList;
import java.util.Collection;

public class Demo3 {
    public static void main(String[] args) {
        Collection<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王麻子");
        list.add("麻五");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        
    }
}

1.2.2增强for循环

package com.ccx.Collection_1;

import java.util.ArrayList;
import java.util.Collection;

public class Demo3 {
    public static void main(String[] args) {
        Collection<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王麻子");
        list.add("麻五");
        for (String s : list) {
            System.out.println(s);
        }

    }
}

1.2.3迭代器

package com.ccx.Collection_1;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Demo3 {
    public static void main(String[] args) {
        Collection<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王麻子");
        list.add("麻五");

//        for (String s : list) {
//            System.out.println(s);
//        }
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next(););
        }
    }
}

1.3集合中存对象

package com.ccx.Collection_1;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Demo4 {
    public static void main(String[] args) {
        Collection <People> list = new ArrayList<>();
        list.add(new People("张三",18,'男'));
        list.add(new People("李四",19,'男'));
        list.add(new People("王五",20,'男'));
        list.add(new People("刘六",21,'男'));
        list.add(new People("牛七",22,'男'));
        Iterator <People>iterator = list.iterator();//迭代器
        while (iterator.hasNext()) {//使用while循环遍历,有快捷键itit
            Object next =  iterator.next();
            System.out.println(next);
        }
        //当while循环结束时候,迭代器的指针已经指到最后一个数据,再使用iterator.next();就会报异常
        //iterator.next();//会报异常NoSuchElementException
        //如果想要重新再遍历一遍的话,使用iterator = list.iterator();
        System.out.println(iterator);//第一个地址@1b6d3586
        System.out.println("=================第二遍遍历================");
        iterator = list.iterator();//这个时候iterator已经指向了另外一个地址
        while (iterator.hasNext()) {
            People next =  iterator.next();
            System.out.println(next);
        }
        System.out.println(iterator);//第二个地址@4554617c
        //获取指定下标的元素,下表为1的
        People people = list.get(1);
        System.out.println(prople.getName());
    }
}
class People{
    private String name;
    private int age;
    private char sex;

    public People(String name, int age, char sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {//重写Object的方法
        return "People{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
}

2ArrayList

ArrayList的底层是数组,可以自动扩容的,默认的容量是10,每次增长1.5倍。

特征:

查询快,增删慢。

开发的时候ArrayList用的多,因为开发查询用的比较多

2.2LinkedList

LinkedList的底层是双向链表

特征:

查询慢,增删快。

2.3Vector

Vector的底层也是数组

特征:

用于线程安全,相比而言效率较低

2.4三者的区别总结

ArrayList和Vector 底层是数组,但是Vector是线程安全的,所以效率底,开发中不用Vector
接下来介绍ArrayList和linkedListu区别:
    1.ArrayList底层是数组
     LinkedList底层是双向链表
    2.ArrayList 的特征:
        查询快: 底层是索引,有序的通过内存有序地址,直接找到 时间复杂度  o(1)
        增删慢: 增加数据和删除数据有可能扩容。每次扩1.5倍。扩容的话,浪费内存浪费时间o(n)
    3.LinkedList的特征:
        查询慢:底层是二分法查找的算法 时间复杂度是log以2为底 n的对数
        增删快:直接找前置结点 Node prev,后继结点 Node next
        。时间复杂度是 o(1)
    所以开发时候的用ArrayList

3List常用的方法

返回值类型方法名方法用法
booleanadd(E e)添加一个数据到集合中
booleanaddAll(Collection<? extends E> c)添加一个集合数据到这个集合中
booleanremove(Object obj)删除一个指定的数据
booleanremoveAll(Collection<? extends E> c)删除所有和指定的集合数据重复的数据
voidclear()清空
intsize()查询集合中元素的个数
Object []toArray()把集合转为数组
booleancontains(Object obj)查询集合中是否存在指定的数据
booleancontainsAll(Collection<? extends E> c)查询集合中是否存在指定的集合的数据
booleanisEmpty(Collection<? extends E> c)判断集合是否为空
voidadd(int index, E e);在指定的位置上插入一个元素
booleanaddAll(int index, Collection<? extends E> e);将一个集合插入到另外一个集合的指定的位置
Eremove(int index);通过索引来删除指定的元素。返回的是被删除的元素
Eset(int index, E e);通过指定的索引修改数据元素,返回值是被修改的原数据
Eget(int index);通过索引下标去获取指定元素
intindexOf(Object obj);通过元素获取它第一次出现的下标
intlastIndexOf(object obj);通过元素获取最后一次出现的元素的下标
List<E>subList(int formIndex, int toIndex);截取一部分出来[前,后)

占位

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值