简要介绍

顺序表是一段物理地址连续的储存空间,一般情况下用数组储存,并在数组上完成增删查改。而在java中我们有ArrayList这个容器类封装了顺序表的方法。

在集合框架中,ArrayList是一个普通的类,其实现了list接口。其源码类定义如图

可见,其实现了RandomAccess, Cloneable, 以及Serializable接口,分别代表了其支持随机访问,clone,以及序列化。

Arraylist容器类的使用

Arraylist容器类的构造

 public static void main(String[] args) {
        //无参数的构造方法
        List<Integer> list1 = new ArrayList<>();
        //指定初始容量的构造方法
        List<Integer> list2 = new ArrayList<>();
        list1.add(1);
        list1.add(2);
        list1.add(3);
        //使用其他collection进行初始化(此处是ArrayList)
        List<Integer> list3 = new ArrayList<>(list1);

ArrayList的常见方法

方法 解释
boolean add(E e) 尾插e
void add(int index, E element) 将 e 插入到 index 位置
boolean addAll(Collection<? extends E> c) 将集合 c 中的元素 尾插到该集合中
E remove(int index) 删除 index 位置元素并返回
boolean remove(Object o) 删除遇到的第一个 o
E get(int index) 获取下标 index 位置元素
E set(int index, E element) 将下标 index 位置元素设置为 element
void clear() 清空顺序表
boolean contains(Object o) 判断 o 是否在线性表中
int indexOf(Object o) 返回第一个 o 所在下标
int lastIndexOf(Object o) 返回最后一个 o 的下标
List< E > subList(int fromIndex, int toIndex) 截取部分 list
List<String> list = new ArrayList<>();
        list.add("盛夏");// 尾插元素 “盛夏”
        list.add(1,"洋光");//在1下标处插入元素 “洋光”
        list.addAll(list);//将list中的元素全部尾插
        list.remove(0);//删除0下标处的元素
        boolean flg = list.remove("盛夏");//删除遇到的第一个元素“盛夏”,删除成功flg为true,删除失败flg为false;
        String s = list.get(0);//获取0下标处的元素
        list.set(0,"盛夏");//将0下标元素设为 “盛夏”
        boolean flg1 = list.contains("盛夏");//查询“盛夏”是否在顺序表内,存在flg1为true,不存在flg1为false;
        list.indexOf("盛夏");//返回第一个 "盛夏" 所在下标
        list.lastIndexOf("盛夏");// 返回最后一个 "盛夏" 的下标
        //截取list的[0,1)为subList,注意区间左闭右开
        List<String> subList = list.subList(0,1);

注:此处的subList方法只是截取了原list中被截取部分的地址,所以若改变subList元素,原list中元素也会改变。

ArrayList的遍历

循环遍历

for-each遍历

//循环遍历
        for(int i = 0; i<list.size();i  ){
            System.out.print(list.get(i) " ");
        }
        //for-each 遍历
        for(String i:list){
            System.out.print(i " ");
        }

ArrayList中的扩容机制

源码分析:

1.当我们调用无参构造方法,或者参数为0时,此时的数组为一个空数组。

而当第一次add的时候,底层的数组容量才变成了10;

2.后续若在需扩容,按照1.5倍扩容

即:

1.无参构造方法,或参数为零构造方法,底层数组为0,第一次add后,底层数组为10,10个放满后以1.5倍扩容

2.参数大于零的构造方法,底层数组为参数,数组放满后,以1.5倍扩容。

到此这篇关于Java超详细讲解ArrayList与顺序表的用法的文章就介绍到这了,更多相关Java ArrayList与顺序表内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Java超详细讲解ArrayList与顺序表的用法的更多相关文章

  1. android – 如何在ViewPager中使用cursorLoader?

    解决方法我无法评论,所以我正在写一个答案..您有一个实现LoaderCallbacks的活动.加载数据时,您的活动会收到onLoadFinished回调.在此方法中,您有一个应该在ViewPager中显示的Cursor.要显示Cursor中的数据,请在适配器上调用swapCursor方法.因此,每次加载数据时都不要创建适配器.创建一次,然后只需调用swapCursor即可.此外,每次都找不到ViewPager–findViewById是一个繁重的操作,它应该在创建视图层次结构后执行.所以,你的onLoad

  2. android – 在onRestoreInstanceState中发生ClassCastException

    ClassCastException随机发生以恢复onRestoreInstanceState()中的Vector.通常恢复向量很好,但有时会发生异常.我认为它发生在活动进入后台并被破坏但我不确定.有任何想法吗?谢谢.添加:我忘了附上异常日志.那是解决方法我使用下一个代码来恢复Vector:它会阻止java.lang.classCastException并保存元素顺序.要恢复Stack,您可以使用

  3. android – 如何在活动中调用非活动类的方法

    我有一个Activity和非Activity类.如何从非Activity类调用Activity类中的方法解决方法只需在DateClass中创建一个回调接口.

  4. 是否有可能在android中创建一个Bitmap数组

    我想创建一个位图数组.可能吗?如果是,那是声明Bitmap数组的方法.以及如何初始化它?谢谢解决方法你可以使用Arraylist:或者只是一个位图数组,如:不过要小心你的图像大小.如果你试图存储很多大图像,你可能会遇到一些麻烦.

  5. Realm.io Android从表中获取最后20个项目的最佳方法

    在一个表中说100项,这是获得最后20个对象的最佳方法.我能想到的一种方法是加载所有对象,反转数组,创建一个新数组并从结果循环20次,填充新数组并返回它.如下所示:有没有更好的方法在Android中使用realm.io做到这一点?更新到目前为止这是如何处理的..解决方法另请注意,Realm表是无序的.将它们视为放置数据的包.这意味着如果您想要插入最后20个项目,则需要添加一个字段以包含插入时间.这样做还可以让您非常有效地实现您想要的结果:

  6. 如何在Android中处理ConcurrentModificationException

    我试图从ArrayList中删除项目.有时它会弹出一个异常,“java.util.ConcurrentModificationException”.首先我尝试通过array_list_name.remove(i)删除它们,但它失败了,有些人被要求使用Iterator.所以我目前的代码如下.我在视图中的onDraw()函数中调用“array_list_name”.我的观点是SurfaceView.任

  7. android – 用于osmdroid错误的RoadManager

    我在这里遵循https://code.google.com/p/osmbonuspack/wiki/Tutorial_1教程,但我遇到一个错误,它没有正确显示正确的路由.它只显示从A点到B点的直线.我想要实现的是从这些点显示正确的路线.我猜错误是它无法识别任何节点.一个类似的问题也被问到,如果我没有很好地解释我的问题,我假设我有同样的问题.类似的问题可以在这里找到:OSMDroidRoutingp

  8. android – 自动值 – 包裹 – 适配器可以应对另一个自动值类的Typed Set吗?

    我正在调查自动值和它的扩展,即我的Android应用程序中的auto-value-parcel和auto-value-parcel-adapter.我有这些模型类:–和我的类型适配器是我的问题出现的地方我需要传递给readTypedArray的CREATOR在Autovalue_Amoeba中声明.我的错误在哪里?对自动价值包裹的误解?解决方法Autovalue:Parcel扩展无法处理集合,但如果将属性转换为List,则无需自定义适配器即可开箱即用.如果你想把它当成一个集合你就可以做到这一点.请记住,您

  9. android – 保存ArrayList内容的最佳方法是什么?

    我想保存一个ArrayList,以便它是持久的.内容可以改变.在android中接近这个的最佳方法是什么?.不知道“东西”是什么,我们不能轻易回答这个问题.您的一般选择是使用数据库或持久化到文件.一般来说,sqlite数据库具有优势,因为它使用事务并且通常比仅编写自己的文件更健壮.但是,您的ArrayList可能存储的内容在数据库中可能无法正常工作.当然,您的ArrayList可能存储的内容甚至可能根本不能保留.

  10. android – 在ActivityGroup中暂停和恢复子活动

    我正在尝试创建一个自定义的ActivityGroup.除了组子活动的活动生命周期方法之外,我正在使一切正常工作.当我们的子活动进入/退出焦点时如何调用onResume/onPause方法?我知道tabactivity这样做但我在查看代码时无法找到.提前致谢!

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部