设计一个Array类,添加一个整型数组,并对给数组赋初值值添加构造方法,给Array类添加数组求和的方

java中的arrayList(动态数组)与静态数组
首先,有时用数组时,常把静态数组和动态相混淆,今天来区分一下:
先写一下java中静态数组,
一维数组的声明方式:
type var[]; 或type[]
声明数组时不能指定其长度(数组中元素的个数),
中使用关键字new创建数组对象,格式为:
数组名 = new 数组元素的类型 [数组元素的个数]
int[] s = new int[5];
//s = new int[5] ;
for(int i = 4 ; i &= 0 ; i--) {&
System.out.println(&& + s[i]) ;&
1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;
2.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;
3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化。
动态初始化如上述代码。
静态初始化:String[] ss =& {&0&,&1&,&2&} ;或者 int[] aa = {0,1,2};
默认:如:如果是整型,则全是0。
再说动态数组:
在DAO层中,较常用的是用arrayList来做返回对象数组的集合。
public List&Vehicle& fetchAllVehicelList(){
List&Vehicle& vehicles = new ArrayList&Vehicle&();
vehicles = this.getHibernateTemplate().find(&from Vehicle v&);
那么,就认识一下arraylist吧。。
1、什么是ArrayList
ArrayList就是传说中的动态数组,其实就是Array的复杂版本,它提供了如下一些好处:
动态的增加和减少元素
实现了ICollection和IList接口
灵活的设置数组的大小
2、如何使用ArrayList
最简单的例子:
ArrayList List = new ArrayList();
for( int i=0;i &10;i++ ) //给数组增加10个Int元素
List.Add(i);
//..程序做一些处理
List.RemoveAt(5);//将第6个元素移除
for( int i=0;i &3;i++ ) //再增加3个元素
List.Add(i+20);
Int32[] values = (Int32[])List.ToArray(typeof(Int32));//返回ArrayList包含的数组
这是一个简单的例子,虽然没有包含ArrayList所有的方法,但是可以反映出ArrayList最常用的用法
3、ArrayList重要的方法和属性
ArrayList提供了三个构造器:
public ArrayList();
默认的构造器,将会以默认(16)的大小来初始化内部的数组
public ArrayList(ICollection);
用一个ICollection对象来构造,并将该集合的元素添加到ArrayList
public ArrayList(int);
用指定的大小来初始化内部的数组
2)IsSynchronized属性和ArrayList.Synchronized方法
IsSynchronized属性指示当前的ArrayList实例是否支持线程同步,而ArrayList.Synchronized静态方法则会返回一个ArrayList的线程同步的封装。
如果使用非线程同步的实例,那么在多线程访问的时候,需要自己手动调用lock来保持线程同步,例如:
ArrayList list = new ArrayList();
lock( list.SyncRoot ) //当ArrayList为非线程包装的时候,SyncRoot属性其实就是它自己,但是为了满足ICollection的SyncRoot定义,这里还是使用SyncRoot来保持源代码的规范性
list.Add( &Add a Item& );
如果使用ArrayList.Synchronized方法返回的实例,那么就不用考虑线程同步的问题,这个实例本身就是线程安全的,实际上ArrayList内部实现了一个保证线程同步的内部类,ArrayList.Synchronized返回的就是这个类的实例,它里面的每个属性都是用了lock关键字来保证线程同步。
3)Count属性和Capacity属性
Count属性是目前ArrayList包含的元素的数量,这个属性是只读的。
Capacity属性是目前ArrayList能够包含的最大数量,可以手动的设置这个属性,但是当设置为小于Count值的时候会引发一个异常。
4)Add、AddRange、Remove、RemoveAt、RemoveRange、Insert、InsertRange
这几个方法比较类似
Add方法用于添加一个元素到当前列表的末尾
AddRange方法用于添加一批元素到当前列表的末尾
Remove方法用于删除一个元素,通过元素本身的引用来删除
RemoveAt方法用于删除一个元素,通过索引值来删除
RemoveRange用于删除一批元素,通过指定开始的索引和删除的数量来删除
Insert用于添加一个元素到指定位置,列表后面的元素依次往后移动
InsertRange用于从指定位置开始添加一批元素,列表后面的元素依次往后移动
另外,还有几个类似的方法:
Clear方法用于清除现有所有的元素
Contains方法用来查找某个对象在不在列表之中
其他的我就不一一累赘了,大家可以查看MSDN,上面讲的更仔细
5)TrimSize方法
这个方法用于将ArrayList固定到实际元素的大小,当动态数组元素确定不在添加的时候,可以调用这个方法来释放空余的内存。
6)ToArray方法
这个方法把ArrayList的元素Copy到一个新的数组中。
4、ArrayList与数组转换
ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);
Int32[] values = (Int32[])List.ToArray(typeof(Int32));
ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);
Int32[] values = new Int32[List.Count];
List.CopyTo(values);
上面介绍了两种从ArrayList转换到数组的方法
ArrayList List = new ArrayList();
List.Add( &string& );
List.Add( 1 );
//往数组中添加不同类型的元素
object[] values = List.ToArray(typeof(object)); //正确
string[] values = (string[])List.ToArray(typeof(string)); //错误
和数组不一样,因为可以转换为Object数组,所以往ArrayList里面添加不同类型的元素是不会出错的,但是当调用ArrayList方法的时候,要么传递所有元素都可以正确转型的类型或者Object类型,否则将会抛出无法转型的异常。
5、ArrayList最佳使用建议
这一节我们来讨论ArrayList与数组的差别,以及ArrayList的效率问题
1)ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚
定到实际元素的大小,当动态数组元素确定不在添加的时候,可以调用这个方法来释放空余的内存。
6)ToArray方法
这个方法把ArrayList的元素Copy到一个新的数组中。
4、ArrayList与数组转换
ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);
Int32[] values = (Int32[])List.ToArray(typeof(Int32));
ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);
Int32[] values = new Int32[List.Count];
List.CopyTo(values);
上面介绍了两种从ArrayList转换到数组的方法
ArrayList List = new ArrayList();
List.Add( &string& );
List.Add( 1 );
//往数组中添加不同类型的元素
object[] values = List.ToArray(typeof(object)); //正确
string[] values = (string[])List.ToArray(typeof(string)); //错误
和数组不一样,因为可以转换为Object数组,所以往ArrayList里面添加不同类型的元素是不会出错的,但是当调用ArrayList方法的时候,要么传递所有元素都可以正确转型的类型或者Object类型,否则将会抛出无法转型的异常。
5、ArrayList最佳使用建议
这一节我们来讨论ArrayList与数组的差别,以及ArrayList的效率问题
1)ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。
2)内部的Object类型的影响
对于一般的引用类型来说,这部分的影响不是很大,但是对于值类型来说,往ArrayList里面添加和修改元素,都会引起装箱和拆箱的操作,频繁的操作可能会影响一部分效率。
但是恰恰对于大多数人,多数的应用都是使用值类型的数组。
消除这个影响是没有办法的,除非你不用它,否则就要承担一部分的效率损失,不过这部分的损失不会很大。
3)数组扩容
这是对ArrayList效率影响比较大的一个因素。
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。
例1:比如,一个可能有200个元素的数据动态添加到一个以默认16个元素大小创建的ArrayList中,将会经过:
16*2*2*2*2 = 256
四次的扩容才会满足最终的要求,那么如果一开始就以:
ArrayList List = new ArrayList( 210 );
的方式创建ArrayList,不仅会减少4次数组创建和Copy的操作,还会减少内存使用。
例2:预计有30个元素而创建了一个ArrayList:
ArrayList List = new ArrayList(30);
在执行过程中,加入了31个元素,那么数组会扩充到60个元素的大小,而这时候不会有新的元素再增加进来,而且有没有调用TrimSize方法,那么就有1次扩容的操作,并且浪费了29个元素大小的空间。如果这时候,用:
ArrayList List = new ArrayList(40);
那么一切都解决了。
所以说,正确的预估可能的元素,并且在适当的时候调用TrimSize方法是提高ArrayList使用效率的重要途径。
4)频繁的调用IndexOf、Contains等方法(Sort、BinarySearch等方
法经过优化,不在此列)引起的效率损失
首先,我们要明确一点,ArrayList是动态数组,它不包括通过Key或者Value快速访问的算法,所以实际上调用IndexOf、Contains等方法是执行的简单的循环来查找元素,所以频繁的调用此类方法并不比你自己写循环并且稍作优化来的快,如果有这方面的要求,建议使用Hashtable或SortedList等键值对的集合。
ArrayList al=new ArrayList();
al.Add(&How&);
al.Add(&are&);
al.Add(&you!&);
al.Add(100);
al.Add(200);
al.Add(300);
al.Add(1.2);
al.Add(22.8);
作者:angus_17
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。一个ArrayList里是否可以添加不同的类,一个数组里是否可以添加不同类
采纳的答案
package com.zyn.
import java.util.ArrayL
import java.util.L
public class ArrayListTest {
* @param args
public static void main(String[] args) {
// TODO Auto-generated method stub
List&Object& list = new ArrayList&Object&();
list.add(new Integer(1));
list.add("11");
list.add(new Boolean(false));
for(Object o:list){
System.out.println(o);
Object[] o = new Object[3];
o[0] = new Integer(1);
o[1] = "11";
o[2] = new Boolean(false);
for(Object o1:o){
System.out.println(o1);
,编译通过,运行通过,详细说明请参考《effictive java》
都可以的,比如Object[] objectArray就可以添加所有不同的对象。而ArrayList,如果没设定泛型的话,也可以添加任意不同的类型的对象到ArrayList中。
但这样的话,数据就不安全,处理起来非常麻烦,不建议这么做。
哥们,这是基础知识。建议多看课本。
已解决问题
未解决问题VB程序设计-第5课 VB数组和自定义类型_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者贡献于
评价文档:
65页免费63页免费24页免费60页免费32页免费 37页免费24页免费70页免费5页免费8页免费
喜欢此文档的还喜欢6页免费61页免费241页免费66页免费24页免费
VB程序设计-第5课 VB数组和自定义类型|第课​ ​V​B​数​组​和​自​定​义​类​型
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:504.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢您所在位置: &
&nbsp&&nbsp
C程序设计--利用数组批量处理数据.ppt50页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:50 &&
你可能关注的文档:
··········
··········
C语言的数据类型 本章要点( Targets ) 主要内容( Contents ) 6.1 怎样定义和引用一维数组 6.2 怎样定义和引用二维数组 6.3 字符数组
一维数组的定义和引用
数组 数组就是一组具有相同数据类型的有序数据的集合。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号。 C语言用方括号中的数字表示下标,如用s [15]表示。 用一个数组名和下标唯一确定数组中的元素。 数组按数组元素类型分类,有 数值数组 如int、float等) 字符数组 指针数组 结构数组…… 数组中的每一个元素都属于同一个数据类型。
本章:数值数组和字符数组。 1、一维数组的定义
说明:定义了一个auto型整型数组;数组的元素为整型;数组名为a;元素个数为5,分别叫做: a[0]、a[1]、a[2]、a[3]、a[4];注意:没有a[5]这个数组元素。
例:3个合法的数组定义如下
① char str[20];
② float score[8];
③ #define
5  long data[N];
 int z[4*N];
例:下面的定义是非法的
char c[n];
数组变量在内存中分配一片连续的存储单元,数组元素按数组下标从小到大连续存放。数组名代表首地址 数组起始地址 ,每个元素字节数相同,因此,根据数组元素序号可以求得数组各元素在内存的地址,并可对数组元素进行随机存取。
数组元素地址 数组首地址+元素下标*sizeof 基类型
scanf “%d”,&a[n] ;
printf “\n” ;
for n 14;n
printf “%d”,a[n] ;
? 输出:15
1 含义:在定义数组的同时,对数组各元素指定初值。 初始化是 编译阶段
正在加载中,请稍后...C语言程序设计 第9章 数组类型_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者贡献于
评价文档:
81页免费86页免费41页免费2页¥1.0077页免费 37页免费59页免费22页免费67页免费39页免费
喜欢此文档的还喜欢5页1下载券24页免费10页4下载券32页免费39页免费
C语言程序设计 第9章 数组类型|C​语​言​程​序​设​计
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:325.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢}

我要回帖

更多关于 数组赋初值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信