Java集合类List解读(在云时代架构中读到了)

在Java学习中我们会频繁用到Java集合类,相较于数组(Array)来说,集合类的长度可变,比数组来说要灵活,更适合我们的开发学习。Java集合就像个容器可以存储任何类型的数据,也可以结合泛型来存储具体的类型对象。使用集合类一般都需要引用java.util包。

通过阅读文章我发现了我一直在用的Java集合由两大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口。Collection主要有三个子接口,分别为List(列表)、Set(集)、Queue(队列)。其中,List、Queue中的元素有序可重复,而Set中的元素无序不可重复;List中主要有ArrayList、LinkedList两个实现类;Set中则是有HashSet实现类;而Queue是在JDK1.5后才出现的新集合,主要以数组和链表两种形式存在。Map同属于java.util包中,是集合的一部分,但与Collection是相互独立的,没有任何关系。Map中都是以key-value的形式存在,其中key必须唯一,主要有HashMap、HashTable、TreeMap三个实现类。

List集合是有序的,可以精确的设置元素插入位置,便捷的遍历访问元素。List中我们经常使用的就是ArrayList和LinkedList这两个类。ArrayList的底层通过数组实现,随着元素的加入动态扩容,LinkedList则是通过连表实现的,元素添加是插在链表尾部的。

List常用功能:

A:添加功能
boolean add(E e):向集合中添加一个元素
void add(int index, E element):在指定位置添加元素
boolean addAll(Collection<? extends E> c):向集合中添加一个集合的元素。

B:删除功能
void clear():删除集合中的所有元素
E remove(int index):根据指定索引删除元素,并把删除的元素返回
boolean remove(Object o):从集合中删除指定的元素
boolean removeAll(Collection<?> c):从集合中删除一个指定的集合元素。

C:修改功能
E set(int index, E element):把指定索引位置的元素修改为指定的值,返回修改前的值。

D:获取功能
E get(int index):获取指定位置的元素
Iterator iterator():就是用来获取集合中每一个元素。

E:判断功能
boolean isEmpty():判断集合是否为空。
boolean contains(Object o):判断集合中是否存在指定的元素。
boolean containsAll(Collection<?> c):判断集合中是否存在指定的一个集合中的元素。

F:长度功能
int size():获取集合中的元素个数

G:把集合转换成数组
Object[] toArray():把集合变成数组。

ArrayList是Java集合框架中使用最多的一个类,是我们平常最多使用的,是一个数组队列,线程不安全集合。

继承于AbstractList,实现了List, RandomAccess, Cloneable, Serializable接口。

(1)ArrayList实现List,就是得到了List的功能。
(2)ArrayList实现RandomAccess,获得了快速随机访问存储元素的功能,RandomAccess是一个标记接口,没有任何方法;
(3)ArrayList实现Cloneable,得到了clone()方法,可以实现克隆功能;
(4)ArrayList实现Serializable,它就可以被序列化传输,典型的应用就是hessian协议。

常用操作:

//创建ArrayList集合:
        List<类型> list = new ArrayList<类型>();
//添加功能:
        list.add(要添加的变量);
        list.add(位置,要添加的变量);
//修改功能:
        list.set(位置,修改的变量);
//获取功能:
        list.get(位置);
 //判断功能:
        boolean isEmpty = list.isEmpty();//是否为空
        boolean isContain = list.contains(判断存在的变量);
//长度
        list.size()
//把集合转换成数组:
        String[] strArray = list.toArray(new String[]{});
//删除功能:
        list.remove(位置);
        list.remove(要删除变量);
        list.clear();//将list释放,元素清空,且无返回值
//for循环迭代集合:
        for(String str:list){
            System.out.println(str);
        }
//迭代器遍历集合:(ArrayList实际的跌倒器是Itr对象)
Iterator it=list.iterator();
it.hasNext()

LinkedList我平常很少使用在这里看到了就写一下。LinkedList是一个双向链表,每一个节点都拥有指向前后节点的引用。相比于ArrayList来说,LinkedList的随机访问效率更低。

它继承AbstractSequentialList,实现了List, Deque, Cloneable, Serializable接口。
(1)LinkedList实现List,可以用List的方法。
(2)LinkedList实现Deque,Deque 是一个双向队列,也就是既可以先入先出,又可以先入后出,说简单些就是既可以在头部添加元素,也可以在尾部添加元素;
(3)LinkedList实现Cloneable,得到了clone()方法,可以实现克隆功能;
(4)LinkedList实现Serializable,表示可以被序列化传输,典型的应用就是hessian协议。

常见操作://创建集合       List<类型> list = new linkedList <类型>();

//添加功能:
        list.add(要添加的变量);         list.addLast(要添加的变量)          lis.addFirst(要添加的变量)
//修改功能:
        list.set(位置,修改的变量);
//获取功能:
        list.get(位置);     E getFirst() 获取链表的开头      E getLast() 获取链表的结尾//判断功能:        boolean isEmpty = list.isEmpty();//是否为空        boolean isContains = list.contains(判断存在的变量);
//长度
        list.size()
//把集合转换成数组:
        String[] strArray = list.toArray(new String[]{});
//删除功能:
        list.remove(位置);
        list.remove(要删除变量);     E removeFirst() 移除并返回链表的开头     E removeLast() 移除并返回链表的结尾     list.clear();//将list释放,元素清空,且无返回值
//for循环迭代集合:
        for(String str:list){
            System.out.println(str);
        }
//迭代器遍历集合:(linkedList实际的跌倒器是Itr对象)
Iterator it=list.iterator();
it.hasNext()

两者比较:

(1)操作不同

(2)插入中间元素LinkedList要比ArrayList要快,因为LinkedList用的是链表,而ArrayList用的数组则需要一个个往后移元素。

总结:如果只是存放数据,并进行简单的迭代情况下,我们一般采用ArrayList的效率最高,

如果涉及到频繁的修改元素,就应该采用LinkedList

原文地址:https://www.cnblogs.com/chch157/p/10953702.html

时间: 2024-07-29 14:19:00

Java集合类List解读(在云时代架构中读到了)的相关文章

云时代架构之豆瓣的基础架构读后感

阅读了豆瓣的基础架构,接触了很多新名词,有很多都是没有接触过甚至是没有听过的,说明离就业要求还差着很多,以下是阅读这篇文章我学到的东西: 豆瓣整个基础架构可以粗略的分为在线和离线两大块.在线的部分和大部分网站类似:前面用LVS做HA,用Nginx做反向代理,形成负载均衡的一 层:应用层主要是做运算,将运算结果返回给前面的用户,DAE平台是这两年建起来的,现在大部分豆瓣的应用基本都跑在DAE上面了:应用后面的基础服务也 跟其他网站差不多,MySQL.memcached.redis.beanstal

云时代架构读后感(三)

阿里游戏高可用架构设计实践 原文地址:https://mp.weixin.qq.com/s?__biz=MzA4Nzg5Nzc5OA==&mid=2651660980&idx=1&sn=640c3d2280d7657f236434ff6ba0b22b&scene=21#wechat_redirect 这篇文章文章主要是对游戏架构的设计,因为作为一名游戏玩家,都是非常注重游戏体验的,如果在游戏过程中出现不能登录,或者掉线的情况,很多人可能会投诉.初始可能人们都会认为是运维的原

分布式架构理解(云时代架构文章读后感10)

随着移动互联网的发展智能终端的普及,计算机系统早就从单机独立工作过渡到多机器协作工作.计算机以集群的方式存在,按照分布式理论的指导构建出庞大复杂的应用服务,也已经深入人心.本文力求从分布式基础理论,架构设计模式,工程应用,部署运维,业界方案这几大方面,介绍基于MSA(微服务架构)的分布式的知识体系大纲.从而对SOA到MSA进化有个立体的认识,从概念上和工具应用上更近一步了解微服务分布式的本质,身临其境的感受如何搭建全套微服务架构的过程. SOA面向服务架构 由于业务发展到一定层度后,需要对服务进

关于技术规划、管理、架构的思考(云时代架构文章读后感15)

一.关于技术规划 技术规划规划做得好,能起到比较好的正向引导作用,个人及团队的整体目标感会好很多,分为三个部分的内容: 第一部分是全局分析,这需要溯源历史,思考未来,要对未来有一定的预判.能够基于数据,基于专业,基于客户价值,同时结合顶层的战略.公司的战役情况和组织的现状做分析. 第二部分是定目标.这一部分非常关键,定义好目标以及非目标,哪些事情是不要做的也要讲明白,并且确认目标的实现路径,做好拆解. 最后一部分是以终为始,从最终结果的角度,来溯源开始.从技术支撑业务发展.平台能力输出或者赋能.

分布式架构中数据一致性常见的几个问题(云时代架构文章读后感16)

针对分布式架构下的数据一致性,大家也许会问这样的问题:跨系统间分布式事务如何解决?系统内多个服务的分布式事务如何解决?一个服务内多个数据源/数据库的分布式事务如何解决?……这些问题大家是很容易理解的,但是由于术语不准确,所以解释起来会有二义性,所以先要统一语言或者术语,也就是统一概念: 域是一个虚拟的分类,几个系统属于某一个域,例如网上银行和手机银行都属于电子渠道领域: 传统的单体应用,指的就是系统,在微服务架构下,单体应用采用前后端分离模式,前端一般使用 Nginx,Ngnix 进程间采用主备

互联网高新吗(云时代架构文章读后感14)

原因: 1.12-16年,4G网络大基建,从京沪广深杭,到我家湖南边远贫困村,大干快上,全国范围铺开.运营商主导,网络设备商,芯片商,终端厂商跟进. 2.4G手机大普及.千元以下智能机功不可没,大浪淘沙,小米.华为.OPPO,vivo最终胜出. 3.因为1.2,网民倍增,流量倍增 (10倍,不夸张吧,微信10亿月活跃用户).以前上网需要一台电脑,受制于时间.地点,现在一部手机随时随地,终端数量和上网时间两重倍增,这种机会几十年不遇. 4.移动互联网爆发期,叠加历史性的货币大宽松周期,热钱汹涌,万

基于AWS的云服务架构最佳实践

ZZ from: http://blog.csdn.net/wireless_com/article/details/43305701 近年来,对于打造高度可扩展的应用程序,软件架构师们挖掘了若干相关理念,并以最佳实践的方式加以实施.在今天的"信息时代",这些理念更加适用于不断增长的数据集,不可预知的流量模式,以及快速响应时间的需求.本文将强调并重申其中的一些传统观念,并讨论他们如何在融合云计算的发展,还将讨论由于云计算的动态性而产生的一些前所未有的概念(如弹性). 本文的目标是面向云

如何应对云爆发架构?四种方法替你解忧

[TechTarget中国原创] 虽然大多数CIO喜欢混合云方案,但现实却悄悄遇到了点烦人的小问题——如受美国和欧盟的一些电信业务光纤连接投资不足所累.欢迎来到云爆发架构的地狱式网络体验. 缺乏公有云与私有云之间的带宽使得云爆发与敏捷需要重新定位IT工作负载的理论概念.此外在云爆发架构中迁移数据与系统配置的成本与在局域网(LAN)带宽和存储访问相比,要大得多. 这个与网络资源有关的问题导致了NetApp和Verizon两家公司,成立了合资企业以合作将用户数据传输到Verizon数据中心,以加快公

案例解读|迁云的灵魂3问,降多少本,增多少效,真平滑否?

近年来,在线教育产业发展十分迅速,在线教育真正打破了时间和空间的限制,使得学员可以随时随地学习,预期2020年将有超过3000亿的市场规模.随着行业不断成熟,国家政策的规范发展使得在线教育的发展进入调整期,烧钱获客的模式不再持续,在兼顾业务发展的同时要注意成本控制. 那就需要注意两大问题.一是服务器资源作为IT基础设施支出的头部预算,如何合理利用服务器资源,按需扩容,节省人力维护成本是关键.第二点是由于教育行业的特殊性,满足国家政策对于互联网教育行业安全等级保护有要求,也是重中之重.围绕这两点,