安全编程(六)- Java集合类2

1.数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?

        Array可以包含基本数据类型和对象类型,ArrayList只能包含对象类型;

        Array大小是固定的,ArrayList的大小是动态变化的;

        ArrayList提供了更多的方法和特性,比如:addAll(),removeAll()等。

接下来我们详细了解一下ArrayList:

        (1).ArrayList简介:

                ArrayList是一个数组队列,相当于动态数组。与Array相比,它的容量可以动态增长。它继承与AbstractList,实现了List接口,提供了相关的增加,删除,修改,遍历等功能;实现了RandomAccess接口,RandmoAccess是java中用来被List实现,为List提供快速访问功能的;实现了Cloneable接口,即覆盖了函数clone(),能被克隆;实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。

        (2).ArrayList的遍历方式:

                ArrayList支持三种遍历方式:

             (2.1)通过迭代器遍历,即通过Iterator去遍历;

Integer value = null;
Iterator iter = list.iterator();
while (iter.hasNext()) {
    value = (Integer)iter.next();
}

             (2.2)随机访问,通过索引值去遍历;

Integer value = null;
int size = list.size();
for (int i=0; i<size; i++) {
    value = (Integer)list.get(i);        
}

             (2.3)for循环遍历;

Integer value = null;
for (Integer integ:list) {
    value = integ;
}

实例:

package cn.nuist.pers.August27;

import java.util.*;
import java.util.concurrent.*;
 
public class ArrayListRandomAccessTest {
 
     public static void main(String[] args) {
         List list = new ArrayList();
         for (int i=0; i<100000; i++)
             list.add(i);
         //isRandomAccessSupported(list);
         iteratorThroughRandomAccess(list) ;
         iteratorThroughIterator(list) ;
         iteratorThroughFor2(list) ;
     
     }
 
     private static void isRandomAccessSupported(List list) {
         if (list instanceof RandomAccess) {
             System.out.println("RandomAccess implemented!");
         } else {
             System.out.println("RandomAccess not implemented!");
         }
 
     }
 
     public static void iteratorThroughRandomAccess(List list) {
 
         long startTime;
         long endTime;
         startTime = System.currentTimeMillis();
         for (int i=0; i<list.size(); i++) {
             list.get(i);
         }
         endTime = System.currentTimeMillis();
         long interval = endTime - startTime;
         System.out.println("iteratorThroughRandomAccess:" + interval+" ms");
     }
 
     public static void iteratorThroughIterator(List list) {
 
         long startTime;
         long endTime;
         startTime = System.currentTimeMillis();
         for(Iterator iter = list.iterator(); iter.hasNext(); ) {
             iter.next();
         }
         endTime = System.currentTimeMillis();
         long interval = endTime - startTime;
         System.out.println("iteratorThroughIterator:" + interval+" ms");
     }
 
 
     public static void iteratorThroughFor2(List list) {
 
         long startTime;
         long endTime;
         startTime = System.currentTimeMillis();
         for(Object obj:list)
             ;
         endTime = System.currentTimeMillis();
         long interval = endTime - startTime;
         System.out.println("iteratorThroughFor2:" + interval+" ms");
     }
 }

运行结果:

iteratorThroughRandomAccess:5 ms
iteratorThroughIterator:6 ms
iteratorThroughFor2:5 ms

由此可知,随机访问的效率最高,迭代器的效率最低。

        (3).ArrayList示例:

package cn.nuist.pers.August27;

import java.util.*;
 
 public class ArrayListTest {
 
     public static void main(String[] args) {
         
         // 创建ArrayList
         ArrayList list = new ArrayList();
 
         // 将“”
         list.add("1");
         list.add("2");
         list.add("3");
         list.add("4");
         // 将下面的元素添加到第1个位置
         list.add(0, "5");
 
         // 获取第1个元素
         System.out.println("the first element is: "+ list.get(0));
         // 删除“3”
         list.remove("3");
         // 获取ArrayList的大小
         System.out.println("Arraylist size=: "+ list.size());
         // 判断list中是否包含"3"
         System.out.println("ArrayList contains 3 is: "+ list.contains(3));
         // 设置第2个元素为10
         list.set(1, "10");
 
         // 通过Iterator遍历ArrayList
         for(Iterator iter = list.iterator(); iter.hasNext(); ) {
             System.out.println("next is: "+ iter.next());
         }
 
         // 将ArrayList转换为数组
         String[] arr = (String[])list.toArray(new String[0]);
         for (String str:arr)
             System.out.println("str: "+ str);
 
         // 清空ArrayList
         list.clear();
         // 判断ArrayList是否为空
         System.out.println("ArrayList is empty: "+ list.isEmpty());
     }
 }

运行结果:

the first element is: 5
Arraylist size=: 4
ArrayList contains 3 is: false
next is: 5
next is: 10
next is: 2
next is: 4
str: 5
str: 10
str: 2
str: 4
ArrayList is empty: true

参考资料:http://www.cnblogs.com/skywang12345/p/3308556.html#a1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值