一篇文章让你精通:java集合讲解(二,ArrayList)

26 篇文章 1 订阅
13 篇文章 0 订阅

List集合

主要的实现类是ArrayList与LinkedList,分别是数据结构当中的顺序表与列表实现。还包括了栈与队列的实现类。Deque与Queue。(数组中能放基本数据类型,也能放引用数据类型(对象)。 集合中只能放引用数据类型

List

特点:有序,不唯一(可以重复)

ArrayList

特点:在内存当中分配连续的空间,实现长度不可变。

优点:遍历元素与随机访问元素,效率高

缺点:添加与删除元素时,需要大量的前移或者后移,操作频繁。按照内容查询效率低

ArrayList的常用方法
add()
末尾添加元素,
数组能自动装箱:就是数组封装。普通数据类型——>包装类
可以使用一个参数或者二个,一个时,添加元素,二个时,第一个参数:索引,第二个,添加元素
addAll(对象)

addAll(下标,对象)

复制添加对象全部元素,默认在后面添加

当有二个参数后,表示在下标后添加对象全部元素。

remove()当输入的是对象时,删除对象,当输入的是对下标,删除下标,
el1.removeAll(el2)
在el1中删除el2中相同的元素。
list.retainAll(list2);
在list中查找与list2相同的元素
get()
获取指定索引,返回的是一个对象。
set(index,value)二个参数,第一个为下标,第二个为修改值
clear()清空数组
contains(value)
判断是否存在value值,返回布尔值
indexOf(value)
查找value的下标索引
isEmpty()
判断数组是否为空。
size()
查看数组中真实存储的元素个数。与数组的length()方法返回不同
toString()
遍历数组

注意:下面代码中还有遍历数组的5中方式

public class Text {
    public static void main(String[] args) {
        //创建一个ArrayList集合
        //方法一
        //ArrayList list = new ArrayList(); 
        //数组中能放基本数据类型,也能放引用数据类型(对象)。
        //集合中只能放引用数据类型
        //ArrayList<泛型> list = new ArrayList<泛型>(); 泛型可以理解为一个对象
        
        //通常创建方式:面向接口编程
        //多态性:好处当你的ArrayList()改为它子类LinkedList()时,下面的代码就不要在修改
        List list =new ArrayList();
        
        //add方法:末尾添加元素
        list.add(99);//数组能自动装箱:就是数组封装。普通数据类型——>包装类
        list.add(66);
        list.add(33);
        
        //add方法:第一个参数:索引,第二个,添加元素
        //底层发生了大量元素后移,并可能发生数组扩容
        list.add(2,100);
        
        //get方法 获取指定索引,返回的是一个对象。
        int elem=(int) list.get(2);

        //size方法,查看数组中真实存储的元素个数。不是数组的length
        System.out.println(list.size());
        
        //toString方法,遍历数组
        System.out.println(list.toString());
        //方法1,for循环
        for (int i = 0; i <list.size() ; i++) {
           int elem2= (int) list.get(i);
            System.out.println(i+"是"+elem2);
        }
        //方法2,for-each循环,必须使用对象输出
        for (Object elem3:list){
            System.out.println(elem3);
        }

        //方法3,Iterator (迭代器),iterator()返回 Iterator的接口
        Iterator it=list.iterator();
        while (it.hasNext()){//hasNext():判断是否还有元素,返回布尔值
            int elem2 =(int) it.next(); //next方法:取出元素,返回的也是一个对象。
            System.out.println(elem2);
        }
        
        //方法4,Lambda表达式+流程式编程(JDK1.8提供)
        list.forEach((i)-> System.out.println(i));
//      list.forEach(System.out::println); 第二种写法
        
        

源码了解知识点

1.arraylist的底层是一个长度可以变化的动态数组。

2.jdk1.8 数组默认长度为10,但你创建数组没有参数时,创建的为空数组,第一次添加元素时开始扩容数组为10个。(jdk1.7默认开始创建时长度是10)。

3.array ist在10基础上每次扩容,增加原来的50%(还要进行比较是否满足数据足够存储,够增加50%,不够扩容新增元素最小值)引用指向新数组。

4.arraylist提供一个内部类Itr,实现Iterator接口,实现对集合元素的遍历

为什么使用内部类?

内部类可以直接访问外部类的成员。

泛型的使用

为什么使用泛型?

数组在添加元素时,可以是如何数据类型,但当我们遍历时,我们强制类型转化就存在了问题。有一些类型是不能强制类型转化的。比如字符串不能转化为数子。

当我们使用泛型后,就固定了数组中只能存储一种数据类型,安全性大大提高,而且不需要在使用强制类型转化。让编程更加简单

如何使用泛型?

严进宽出

List<Integer> list =new ArrayList();  //方式一, 
//  List<Integer> list =new ArrayList<Integer>();  方式二
//  ArrayList<泛型> 名称 = new ArrayList<泛型>(); 泛型可以理解为一个对象

LinkedList

特点:采用双向链表的存储方式

优点:添加与删除元素时,效率高(前提是必须先低效率查询,如果插入与删除在头部或者尾部可以减少查询次数)

缺点:遍历元素与随机访问元素,效率低

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韶光不负

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值