java中的arraylist,java中的arraycopy方法

http://www.itjxue.com  2023-01-05 00:02  来源:未知  点击次数: 

java中Arraylist是干什么的?怎么用?

1.ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小。

2.如何用ArrayList

最简单的例子:

ArrayList List = new ArrayList();

for( int i=0;i10;i++ ) //给数组增加10个Int元素

List.Add(i);?

//..程序做一些处理

List.RemoveAt(5);//将第6个元素移除

for( int i=0;i3;i++ ) //再增加3个元素

List.Add(i+20);

Int32[] values = (Int32[])List.ToArray(typeof(Int32));//返回ArrayList包含的数组

这是一个简单的例子,虽然没有包含ArrayList所有的方法,但是可以反映出ArrayList最常用的用法。

扩展资料

ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处。

List 接口的大小可变数组的实现,位于API文档的java.util.ArrayListE。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector 类,除了此类是不同步的。)

参考资料

百度百科-Arraylist

java中Arraylist是干什么的?

1、什么是ArrayList

ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:

动态的增加和减少元素

实现了ICollection和IList接口

灵活的设置数组的大小

2、如何使用ArrayList

最简单的例子:

ArrayList List = new ArrayList();

for( int i=0;i10;i++ ) //给数组增加10个Int元素

List.Add(i);

//..程序做一些处理

List.RemoveAt(5);//将第6个元素移除

for( int i=0;i3;i++ ) //再增加3个元素

List.Add(i+20);

Int32[] values = (Int32[])List.ToArray(typeof(Int32));//返回ArrayList包含的数组

这是一个简单的例子,虽然没有包含ArrayList所有的方法,但是可以反映出ArrayList最常用的用法

3、ArrayList重要的方法和属性

1)构造器

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与数组转换

例1:

ArrayList List = new ArrayList();

List.Add(1);

List.Add(2);

List.Add(3);

Int32[] values = (Int32[])List.ToArray(typeof(Int32));

例2:

ArrayList List = new ArrayList();

List.Add(1);

List.Add(2);

List.Add(3);

Int32[] values = new Int32[List.Count];

List.CopyTo(values);

上面介绍了两种从ArrayList转换到数组的方法

例3:

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里面添加和修改元素,都会引起装箱和拆箱的操作,频繁的操作可能会影响一部分效率。

但是恰恰对于大

JAVA中ArrayList

ArrayList是Java中的动态数组容器。ArrayList在Java SE 1.5之前是原始类型,而之后则是泛型类。

ArrayList list = new ArrayList(); //这是Java SE 1.5之前没有引入泛型时的写法

ArrayListEmployee list = new ArrayListEmployee(); //这是Java SE 1.5及以后的泛型类写法,中代表具体类型

java arraylist用法

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

public class TestMain {

public static void main(String[] args){

List list1 = new ArrayList();

list1.add("a");

list1.add("1");

list1.add("b");

list1.add("2");

list1.add("c");

list1.add("3");

list1.add("d");

//list1.add("4");

Map map1 = genMap(list1);

Iterator it = map1.keySet().iterator();

while(it.hasNext()){

String key = it.next().toString();

String value = map1.get(key).toString();

System.out.println("key :" + key + " ; value = " + value);

}

}

public static Map genMap(List list1){

if(list1.size() % 2 == 1){

throw new IllegalArgumentException("错误:list长度为奇数。");

}

Map map1 = new HashMap();

for(int i=0;ilist1.size();){

map1.put(list1.get(i), list1.get(i+1));

i += 2;

}

return map1;

}

}

注:

代码中注释掉的这一句:

//list1.add("4");

注释掉,则list1的元素个数为单数,

打开,则list1的元素个数为双数。

请分别测试。

(责任编辑:IT教学网)

更多

推荐MYSQL文章