list集合两种遍历效能比较

Java集合遍历性能对比
package test;

import java.util.ArrayList;
import java.util.List;


public class EffectionTest
{
   
    public static void main(String[] args)
    {
        List<User> users = new ArrayList<User>();
        int size = 100000;
        for(int i = 0; i < size; ++ i)
        {
            User user = new User();
            user.setId(i);
            user.setName("name"+i);
            user.setPaw("paw"+i);
            user.setAdd("add"+i);
            users.add(user);
        }
       List<User> userList = new ArrayList<User>();
        long beginTime = System.nanoTime();
          //第一种 size  100000为 -----耗时7740654,7788548,7694470,7994950,7688198,7832452,7949907
        for(User user : users)
        {
            userList.add(user);
        }
        long endTime = System.nanoTime();
        System.out.println("The result is : " + (endTime - beginTime));

        //第二种---  size  100000为-----耗时6057507,5750754,5776411,6040972,6042682,5881894,6055795
//        long  beginTime = System.nanoTime();
//        for(int i = 0; i < users.size(); ++ i)
//        {
//            User user = users.get(i);
//            userList.add(user);
//        }
//        long endTime = System.nanoTime();
//        System.out.println("The result is : " + (endTime - beginTime));
    
    }
}

class User
{
    Integer id;
    String name ;
    String paw;
    String add;
    /**
     * @return the id
     */
    public Integer getId() {
        return id;
    }
    /**
     * @param id the id to set
     */
    public void setId(Integer id) {
        this.id = id;
    }
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * @return the paw
     */
    public String getPaw() {
        return paw;
    }
    /**
     * @param paw the paw to set
     */
    public void setPaw(String paw) {
        this.paw = paw;
    }
    /**
     * @return the add
     */
    public String getAdd() {
        return add;
    }
    /**
     * @param add the add to set
     */
    public void setAdd(String add) {
        this.add = add;
    }
    
}


总体来讲 推荐第二种遍历方式,速度快点。


### Java 集合框架面试题及答案 #### Iterator 接口的作用是什么? Java 迭代器(Iterator)是 Java 集合框架中的一种机制,是一种用于遍历集合(如列表、集合和映射等)的接口[^1]。通过 `Iterator` 可以安全地访问并移除集合中的元素而不会抛出并发修改异常。 ```java List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String element = iterator.next(); System.out.println(element); } ``` #### 如何解决哈希冲突? 当两个不同的键具有相同的哈希码时就会发生哈希冲突。为了处理这种情况,在存储这些键值对时会采用链地址法或者开放寻址法等方式来保存多个条目。对于 `HashMap` 来说,默认情况下使用的是链表结构;而在高负载因子下则转换成红黑树形式提高查找效率[^3]。 #### ArrayList 和 LinkedList 的主要差异有哪些? - **内部实现方式不同** - `ArrayList` 是基于数组实现的动态容量大小可变的线性表。 - `LinkedList` 则是以双向循环链表的形式存在,每个节点都包含前驱指针与后继指针以及数据域三部分组成。 - **随机访问性能对比** - 对于 `ArrayList` 而言能够提供 O(1) 时间复杂度下的索引定位功能; - 但是 `LinkedList` 在这方面表现较差因为每次都需要从头结点开始逐一遍历直到找到目标位置为止因此其时间开销较大约为O(n). #### HashSet 中如何保证元素唯一性的? 由于 `HashSet` 底层依赖于 `HashMap` 实现, 所有存入其中的对象都会被当作 key 存储起来; 当向 set 添加新成员时先调用该对象所属类定义好的 hashCode 方法计算得到 hash 值作为桶编号进而确定具体存放的位置; 如果发现已有相同hash值得记录那么再进一步比较 equals 返回的结果决定是否允许加入还是覆盖原有项从而确保了整个容器里不存在任何重复项目. #### ArrayList 和 Vector 的区别在哪里? 两者都是实现了 List 接口可以用来存储有序不唯一的组件序列. 不过它们之间存在着一些显著的区别: - 同步特性方面: - `Vector` 默认就是线程安全类型的即所有的增删改查方法都被 synchronized 关键字修饰过了; - 相反 `ArrayList` 并不具备这样的性质所以在多线程环境下可能会遇到竞态条件等问题需要额外加锁保护共享资源. - 性能考量上: - 正是因为上述原因使得前者执行速度相对较慢特别是在频繁读写操作场景下更明显不过如果确实需要用到同步队列的话也可以考虑使用 Collections.synchronizedList 工具类来进行包装获得类似的效果而不必牺牲太多运行效能. - 容量增长策略也有所差别: - 每次扩容时 `Vector` 新分配的空间长度通常是当前数组的一半再加上旧有的全部内容形成新的更大的连续内存块; - 而 `ArrayList` 则按照固定的比率增加默认为原来的百分之五十左右.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值