关于list和String
从数据库查出数据,现在进行存储。我想请问,list比String的优势在哪里,为什么大家都用list。实际上String我可以直接定义成二维数组。对于只有一条记录的,我可...
从数据库查出数据,现在进行存储。
我想请问,list比String的优势在哪里,为什么大家都用list。
实际上String我可以直接定义成二维数组。
对于只有一条记录的,我可以当成String[0][i] 展开
我想请问,list比String的优势在哪里,为什么大家都用list。
实际上String我可以直接定义成二维数组。
对于只有一条记录的,我可以当成String[0][i] 展开
5个回答
展开全部
程序中一般使用的是List的实现类ArrayList
数组是JAVA语言内置的数据类型,它是一个线性的序列,所以它可以快速的访问其他的元素。但是速度是要有代价的,当你创建了一个数组之后,它的容量就固定了,而且在其生命周期里是不能改变的。还有一点,JAVA里面的数组是会做边界检查的,所以当你越界访问时,会抛出RuntimeException,当然边界检查是以牺牲效率为代价的。数组与其它容器类的区别体现在三个方面:效率、类型识别和可以持有primitives。
1.效率:
数组扩容是对ArrayList效率影响比较大的一个因素。
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,
在这个临界点的扩容操作,应该来说是比较影响效率的。
ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于
ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。
2.类型识别:
ArrayList存入对象时,抛弃类型信息,所有对象屏蔽为Object,编译时不检查类型,但是运行时会报错。
注:jdk5中加入了对泛型的支持,已经可以在使用ArrayList时进行类型检查。
从这一点上看来,ArrayList与数组的区别主要就是由于动态增容的效率问题了
3.ArrayList可以存任何Object,如String,Employee等,但不支持基本数据类型,除非使用wrapper。
建议:
首先使用数组,无法确定数组大小时才使用ArrayList!
数组是JAVA语言内置的数据类型,它是一个线性的序列,所以它可以快速的访问其他的元素。但是速度是要有代价的,当你创建了一个数组之后,它的容量就固定了,而且在其生命周期里是不能改变的。还有一点,JAVA里面的数组是会做边界检查的,所以当你越界访问时,会抛出RuntimeException,当然边界检查是以牺牲效率为代价的。数组与其它容器类的区别体现在三个方面:效率、类型识别和可以持有primitives。
1.效率:
数组扩容是对ArrayList效率影响比较大的一个因素。
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,
在这个临界点的扩容操作,应该来说是比较影响效率的。
ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于
ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。
2.类型识别:
ArrayList存入对象时,抛弃类型信息,所有对象屏蔽为Object,编译时不检查类型,但是运行时会报错。
注:jdk5中加入了对泛型的支持,已经可以在使用ArrayList时进行类型检查。
从这一点上看来,ArrayList与数组的区别主要就是由于动态增容的效率问题了
3.ArrayList可以存任何Object,如String,Employee等,但不支持基本数据类型,除非使用wrapper。
建议:
首先使用数组,无法确定数组大小时才使用ArrayList!
展开全部
很简单
从数据库里面查询的时候不知道有多少条记录返回,这种情况用数组,定义数组必须确定长度,如String[] [] ary = new String[2][4];
但是list就不用考虑具体长度。
对于只有一条记录的或者返回数据条数一定的,用数组还会快一点,所以这种情况定义string[]完全可以。
从数据库里面查询的时候不知道有多少条记录返回,这种情况用数组,定义数组必须确定长度,如String[] [] ary = new String[2][4];
但是list就不用考虑具体长度。
对于只有一条记录的或者返回数据条数一定的,用数组还会快一点,所以这种情况定义string[]完全可以。
追问
应该不会这么简单吧!
而且我可以通过
rs.last();
int rowCount=rs.getRow();
rs.beforeFirst();
ResultSetMetaData rsmd=rs.getMetaData();
int colCount=rsmd.getColumnCount();
这几句得到行数和列数的!
追答
问题是你这样就复杂很多了,逻辑上明显没有LIST方便。
而且如果要排序的话,list可以直接调用Collections.sort(list), ,比数组代码简单多了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1楼、2楼讲的都不错
不用考虑长度,不用每次都去获取结果集的长度
存取方便,如果一条记录有30-40个字段或者更多,你记得住那么多字段与索引的对应关系吗,或者是取值的时候看着一张映射表?
不能否认,字符串数组在数据量比较小的时候比较方便
但是当对象粒度比较大时,列表就是比较好的选择了
使用字符数组固然能完成任务,同时列表能够更好地利用对象,减少工作量
不用考虑长度,不用每次都去获取结果集的长度
存取方便,如果一条记录有30-40个字段或者更多,你记得住那么多字段与索引的对应关系吗,或者是取值的时候看着一张映射表?
不能否认,字符串数组在数据量比较小的时候比较方便
但是当对象粒度比较大时,列表就是比较好的选择了
使用字符数组固然能完成任务,同时列表能够更好地利用对象,减少工作量
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
list<表实体> 的话,String就没法达到,并且如果数据库查寻出来的字段不能确定,用list接收也不String好多的多。在list中可以保存对象,实则用的范型,而在String中只能保存String类型的,如果是日期,number,float等,甚至可以是对象中的属性等。而String就太狭隘了,比如得到数据后要返回json格式数据,list就可以达到要求,返回到页面得到json格式数据并且解析出来,而String则片面返回一个几维String型而已,要想构建成json格式,并在页面根据属性取出对应值,就难之又难了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其他的先不管,至少用二维数据存放数据在取出来的时候很麻烦,而list取出来很方便啊 ,而且数组要确定具体长度,但list是可变数组,不需要考虑这些情况,而且在页面显示的时候,list都和这些标签有配套,可以很快遍历,但数组貌似就不怎么方便了
追问
是吗?list如果取一维数组方便我信,取二维就未必了吧。list.get(i);
String[i][j]只用指定下标就可以!
追答
list它的底层原理其实就是用数组实现的,只不过把数组包装了一层,所以它和数组是没多大的区别的是,可能最大的区别就在于一个是可变的,一个是不可变的,其他的基本差不多,你去这个地址看看吧,http://blog.sina.com.cn/s/blog_5ce1fe770100b0ay.html,当然你喜欢用哪一种是由你自己决定,不过用集合的话在页面显示的时候要方便点
还有一点是list提供了删除元素的方法,而数组没有
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询