List的遍历方式

List的遍历方式

对List的遍历方式做一个记录,一共三种,如下

三种方式的基本原理是第一种

第一种: 最原始也是最快的

for (int i = 0; i < list.size(); i++) {
            System.out.printf("%5s", list.get(i));
        }

第二种:增强for循环,效率其次

 for (String temp : list) {
            System.out.printf("%5s", temp);
        }

第三种:迭代器:最慢

 Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.printf("%5s", iterator.next());
        }

ArrayList的小记:

1.构造器:

//默认的构造器,将会以默认(16)的大小来初始化内部的数组 
public ArrayList(); 
//用一个ICollection对象来构造,并将该集合的元素添加到ArrayList 
public ArrayList(ICollection); 
//用指定的大小来初始化内部的数组
public ArrayList(int); 

2.IsSynchronized属性和ArrayList.Synchronized方法

ArrayList支持线程同步,IsSynchronized属性表示当前的List是否是线程安全的,如果不是线程安全的,那么在多线程访问的时候需要手动设置同步,如下:
ArrayList list = new ArrayList(); 
//... 
lock( list.SyncRoot ) 
{ 
    list.Add( “Add a Item” ); 
}
如果使用静态方法ArrayList.Synchronized返回的实例,则本身就是线程安全的,不必再进行手动操作

3.Count属性和Capacity属性

Count存储了当前ArrayList的元素数量,是只读的
Capacity是当前ArrayList最多能包含的数量,当然使用过程中要注意实际数量不要超过Capcity设置的值,否则报错

4.常用方法:

add   用于添加一个元素到当前列表的末尾 
addRange   //用于添加一批元素到当前列表的末尾 
remove    //用于删除一个元素,通过元素本身的引用来删除 
removeAt   //用于删除一个元素,通过索引值来删除 
removeRange   //用于删除一批元素,通过指定开始的索引和删除的数量来删除 
insert   //用于添加一个元素到指定位置,列表后面的元素依次往后移动 
insertRange    //用于从指定位置开始添加一批元素,列表后面的元素依次往后移动
clear    //方法用于清除现有所有的元素 
contains   //用来查找某个对象在不在列表之中
trimSize   //将ArrayList固定到实际元素的大小,当动态数组元素确定不在添加的时候,可以调用这个方法来释放空余的内存。 
toArray //这个方法把ArrayList的元素Copy到一个新的数组中。 

5.ArrayList与数组的互相转化

第一种
ArrayList<Strin> List = new ArrayList<>(); 
//...add操作

String [] values = List.ToArray();
第二种
ArrayList<Strin> List = new ArrayList<>(); 
//...add操作

String [] values = new String [list.size()];
list.copyTo(values);

6.使用优化:

   数组扩容 
这是对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使用效率的重要途径。 
  频繁的调用IndexOf、Contains等方法(Sort、BinarySearch等方

法经过优化,不在此列)引起的效率损失 
首先,我们要明确一点,ArrayList是动态数组,它不包括通过Key或者Value快速访问 的算法,所以实际上调用IndexOf、Contains等方法是执行的简单的循环来查找元素,所以频繁的调用此类方法并不比你自己写循环并且稍作优化来 的快,如果有这方面的要求,建议使用Hashtable或SortedList等键值对的集合。 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值