`

java 集合查找效率 List Set

阅读更多
public class TestListSet {

    private static String LABEL = "testlistset";

    public static void main(String[] args) {

        List<String> list = getList();
        Set<String> set = getSet();
        String tt = LABEL + 83445;
        long tt0 = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            list.contains(tt);
        }
        long tt1 = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            set.contains(tt);
        }
        long tt2 = System.currentTimeMillis();
        System.out.println(String.format("compare list(%d) vs set(%d) ", (tt1 - tt0), (tt2 - tt1)));
    }

    /**
     * @Title: getSet
     * @Description: TODO
     * @return
     */
    private static Set<String> getSet() {
        long t0 = System.currentTimeMillis();
        Set<String> set = new HashSet<>();
        for (int i = 0; i < 100000; i++) {
            set.add(LABEL + i);
        }
        long t1 = System.currentTimeMillis();
        System.out.println("init set 10W times = " + (t1 - t0));
        return set;
    }

    /**
     * @Title: getList
     * @Description: TODO
     * @return
     */
    private static List<String> getList() {
        long t0 = System.currentTimeMillis();
        List<String> list = new ArrayList<>();
        for (int i = 0; i < 100000; i++) {
            list.add(LABEL + i);
        }
        long t1 = System.currentTimeMillis();
        System.out.println("init list 10W times = " + (t1 - t0));
        return list;
    }

}

结果

init list 10W times = 23
init set 10W times = 50
compare list(70529) vs set(4)

说明
List中contains():调用indexOf(o)方法 遍历List中的每个元素,每个元素与比较对象进行equals()比较,只要有一个相同,就返回true 意思是说他就是会扫描整个List
Set中的contain():调用的是map.containKey(o),内部使用的是Hashtable
/**
     * Returns <tt>true</tt> if this map contains a mapping for the
     * specified key.
     *
     * @param   key   The key whose presence in this map is to be tested
     * @return <tt>true</tt> if this map contains a mapping for the specified
     * key.
     */
    public boolean containsKey(Object key) {
        return getNode(hash(key), key) != null;
    }


所以如果在大队列中嵌套循环中比较存在的话,请选用hashset,效率会大大提升。
分享到:
评论

相关推荐

    Java-Java集合体系-List-Set

    理解并熟练运用Java集合体系中的List、Set、Map接口及其实现类,对于日常开发和面试来说至关重要,因为它们是许多Java框架和库的基础。在实际项目中,根据需求选择合适的集合类型可以提高代码的效率和可维护性。在...

    Java集合Collection、List、Set、Map使用详解

    本文将深入解析Java集合中的Collection、List、Set和Map,包括它们的使用方法、实现原理以及如何进行排序。 ### 集合框架概述 1.1.1 容器简介 容器是Java集合框架的基础,它是一个可以存储多个对象的容器,提供了...

    java集合类的效率测试

    本测试着重探讨了Java集合类中的Set接口实现类(如HashSet)以及List接口实现类(如ArrayList和LinkedList)在进行增、删、改、查操作时的性能差异。 首先,我们来看ArrayList。ArrayList是一个基于数组实现的列表...

    JAVA集合(List,Set,Map)

    ### JAVA集合(List, Set, Map)详解 #### 集合框架概述 Java集合框架是Java编程语言中处理数据组织的核心部分。它提供了一系列接口、抽象类和具体实现类,帮助开发者有效地管理对象集合。本篇文章将深入探讨集合框架...

    Java集合类List-Set-Map的区别和联系.doc

    Java集合框架是编程中不可或缺的一部分,它提供了多种数据结构,如List、Set和Map,用于存储和管理对象。下面我们将详细探讨这些集合类的区别、联系以及何时选择它们。 首先,数组(Array)是最基础的数据结构,它...

    精通java集合框架--List,Set..

    ### 精通Java集合框架——List, Set, Map #### 概述 Java集合框架是一种高度抽象且灵活的数据组织工具,它通过一系列接口来定义不同类型的数据容器,并提供了丰富的操作这些容器的方法。本文将深入探讨Java集合...

    Java应用:两种Java容器类List和Set分析

    ### Java应用:两种Java容器类List和Set分析 #### 一、概述 在Java编程语言中,集合框架(Collections Framework)是处理数据的核心组件之一,它提供了存储和操作对象的各种方式。本文将深入探讨Java中的两种重要...

    Java集合排序及java集合类详解(Collection、List、Map、Set)

    ### Java集合排序及java集合类详解(Collection、List、Map、Set) #### 集合框架概述 ##### 容器简介 在Java编程中,容器(Container)是指用来存储和管理对象的一种数据结构。随着应用程序复杂度的增加,简单地...

    Java集合容器集合框架Set集(与“集合”有关文档共23张).pptx

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组接口和类,使得开发者能够方便地管理和操作数据。本章重点讲述了Set接口及其相关的实现类,List接口及其实现类,以及Map接口及其实现类的使用。 ...

    Java集合知识图谱 ,包含map,list,set

    本知识图谱将详细讲解Java集合中的Map、List和Set三大主要接口,以及它们的实现类。 首先,我们来看“2.3 Java集合图谱.jpg”,这张图谱通常会展示整个Java集合框架的层级结构,包括ArrayList、LinkedList、HashSet...

    java泛型集合 java集合 集合 java Collection

    Java集合框架是一个包含多种数据结构(如列表、集、队列等)的API,这些数据结构由接口(如`Collection`、`List`、`Set`和`Queue`)和实现这些接口的类(如`ArrayList`、`HashSet`和`LinkedList`)组成。`Collection...

    Java集合Collection、List、Set、Map使用详细讲解.doc

    Java集合框架的设计使得开发者能够根据具体需求选择最合适的容器,提高代码的可读性和效率。理解并熟练运用这些接口和类是Java程序员必备的技能。在实际开发中,正确地使用集合框架能够简化代码,提高程序性能,并...

    Java集合排序及java集合类详解.pdf

    Java集合框架提供了多种数据结构,包括列表(List)、集(Set)和映射(Map),这些数据结构允许程序员以高效的方式处理大量数据。 ##### 1.1 容器简介 容器是Java集合框架的基础概念,它们用于存储对象的集合。容器分为...

    java集合习题及答案

    ### Java集合基础习题解析及答案 #### 题目一:统计子字符串在字符串中的出现次数 **题目描述:** 编写一个Java程序,定义一个方法`getCount`,该方法接收两个参数:一个字符串`str`和一个子字符串`s`,返回`s`在`...

    List和Set使用retainAll方法的比较

    `retainAll`是Java集合框架中`Collection`接口的一个方法,它的作用是保留当前集合中与指定集合交集的部分,即删除所有不在指定集合中的元素。这个方法在处理大量数据时,对于集合的筛选和优化非常有用。 1. **List...

    java 集合部分笔记

    【Java集合】 Java集合框架是Java编程语言中用于存储和操作对象的工具,它提供了多种数据结构,如列表、集、映射等,以适应不同的数据处理需求。集合类通常位于`java.util`包下,是Java程序员必备的知识点。 1. **...

    Java(Collection_List_Map_Set).rar_java集合类详解

    本篇文章将深入探讨Java集合类,包括Collection、List、Map和Set,以及它们之间的关联和排序机制。 首先,让我们从Collection接口开始。Collection是最基本的集合接口,它是所有集合类的父接口。Collection接口定义...

    java 集合(list-queue-set)学习

    首先,List接口是Java集合框架中用于存储有序元素的接口,它允许元素重复,并且可以通过索引来访问元素。ArrayList和LinkedList是List接口的两种常见实现。ArrayList基于动态数组,适合于频繁的随机访问,因为它的...

    java中三种集合set、map、list的区别与联系

    在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中最常用的是`Set`、`Map`和`List`。这三种集合类型各自具有独特的特性和用途,理解它们之间的区别与联系对于有效地使用Java进行数据管理至关重要...

Global site tag (gtag.js) - Google Analytics