GVKun编程网logo

使用ArrayList或HashMap获得更好的速度(对hashmap,arraylist内存储的数据)

9

对于使用ArrayList或HashMap获得更好的速度感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解对hashmap,arraylist内存储的数据,并且为您提供关于arraylistl

对于使用ArrayList或HashMap获得更好的速度感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解对hashmap,arraylist内存储的数据,并且为您提供关于arraylist linklist stack hashmap hashtable 的区别、ArrayList 与 HashMap 踩的坑、ArrayList 与LinkedList 区别 Hashtable与HashMap的区别、ArrayList ,HashMap ,HashSet中放null的宝贵知识。

本文目录一览:

使用ArrayList或HashMap获得更好的速度(对hashmap,arraylist内存储的数据)

使用ArrayList或HashMap获得更好的速度(对hashmap,arraylist内存储的数据)

我需要对象A的“列表”或“地图”。…此列表将从另一个ArrayList中添加。当idA的参数相等时,认为对象A等于另一个。

我的问题是我只想添加列表中不存在的对象。我不知道在这两种实现方式之间。使用ArrayList或HashMap

1. ArrayList:for (A a: source) {if (! (a in ArrayList)) addToArrayList();}2. HashMap <id, A>for (A a: source) {hasmap.put (a.id, a)}

哪一个会增加添加大量对象(超过1000个对象或更多对象)的速度更快?我的问题是否有更好的模式???

答案1

小编典典

首先,我要大胆地指出这是 两个完全不同的数据结构。 A List处理元素的线性表示,并Map处理键对值。

我的直觉是您正在尝试在a List和a 之间进行选择Set

如果您只想输入 唯一的 元素,或者更简洁地说,如果您只关心唯一的值,那么Set最好的选择是-也许HashSet您不关心订购。
它为基本操作(例如添加,删除,包含和大小)提供了O(1)时间。

(足够有趣的是,HashSet它由支持HashMap,但提供的接口类似于ArrayList。)

arraylist linklist stack hashmap hashtable 的区别

    arraylist linklist stack hashmap hashtable 是我们经常能用到的集合类,关于他们之间的联系与区别是经常面试的必考题目,下面我们就来大致了解一下这几者之间的关系:

   1、实现机制:

   arraylist 是基于数组实现的,可以用下标进行值的存取,默认的大小是 10,也可以扩展其容量;linklist 是基于链表结构实现的数据集合类,准确的说是采取的是双向链表结构;stack 是基于栈结构实现的,即存在后进先出的存取顺序;hashmap 和 hashtable 基于哈希表的 map 接口的实现类,其存储方式是键值对的形式,即 key-value,两者在结构上的区别不大。

   2、运行效率

   这里我主要把运行效率分为访问效率(读取)和存取效率(增加删除操作),两者在不同的集合类上的效率是不同的,在 arraylist 中,由于是基于数组实现,所以在访问操作上是效率比 linklist 的效率高(访问第一个元素时不一定存在此结果),因为链表结构的集合类在访问时涉及从第一个元素开始遍历,直到找到目标元素,而数组结构可以直接读取数据。在存取效率上,arraylist 要比 linklist 低(当数据增加在集合最后一个元素 = 之后事此结果不一定存在),因为数组结构的存取涉及元素的移动,而链表结构则直接在相应位置添加,再增加相应的地址指针就可以了。此外,hashmap 和 hashtable 由于结构上的差距不,所以在效率上也不大。

   3、同步性

  arraylist 和 hashmap 没有使用 synchronized 方法,即本身不自带同步(线程不安全),当我们需要使用同步时,需要自己外部给他同步,而 vector 和 hashtable 的方法是 Synchronize 的,在多个线程访问该集合对象时,线程安全。

   4、其他

        1 ) hashmap 允许一个 null 的 key、一个或者多个 null 的 value,但 hashtable 不允许有 null 存在;

        2)list 类允许元素重复,但 set 类不允许元素重复;

        3 ) HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和 containsKey

若有不对的地方,希望大神们多多指教。

   

ArrayList 与 HashMap 踩的坑

ArrayList 与 HashMap 踩的坑

转:

ArrayList 与 HashMap 踩的坑

ArrayList 与 HashMap 踩的坑

1. 错误的代码

package com.xrluo.type09;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Demo3
{
    public static void main(String[] args)
    {

        ArrayList
  
  
   
   > list = new ArrayList<>();
        HashMap
   
   
    
     map = new HashMap<>();
        /*
            这个地方是不是可以理解为 list map都是指向一个内存的地址
         */
        map.put("key1","value1");
        map.put("key2","value2");

        /*
            {key1=value1, key2=value2}
            此处是不是可以理解为 把map的内存地址存入到list中
         */
        list.add(map);
        /*
            [{key1=value1, key2=value2}]
         */

        /*
            此处继续操作的事map的内存地址中的数据,所以会替换了上面的数据
         */
        map.put("key1","value3");
        map.put("key2","value4");
        /*
        list == [{key1=value3, key2=value4}]
        */

        list.add(map);
        /*
            list == [{key1=value3, key2=value4}, {key1=value3, key2=value4}]
        */
        System.out.println(list);
        System.out.println(map);
    }
}
   
   
  
  

2. 正确写法

package com.xrluo.type09;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Demo3
{
    public static void main(String[] args)
    {

        ArrayList
  
  
   
   > list = new ArrayList<>();
        HashMap
   
   
    
     map;

        map = new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");
        list.add(map);
        /*
            [{key1=value1, key2=value2}]
         */
        map = new HashMap<>();
        map.put("key1","value3");
        map.put("key2","value4");
        /*
        list == [{key1=value1, key2=value2}]
        */

        list.add(map);
        /*
            list == [{key1=value1, key2=value2}, {key1=value3, key2=value4}]
        */
        System.out.println(list);
        System.out.println(map);
    }
}
   
   
  
  

转:

ArrayList 与 HashMap 踩的坑


--Posted from Rpc

ArrayList 与LinkedList 区别 Hashtable与HashMap的区别

ArrayList 与LinkedList 区别 Hashtable与HashMap的区别

ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦
LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引  但是缺点就是查找非常麻烦 要丛第一个索引开始

Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。 

也许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。 

第三点不同是,只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。 

一些资料建议,当需要同步时,用Hashtable,反之用HashMap。但是,因为在需要时,HashMap可以被同步,HashMap的功能比Hashtable的功能更多,而且它不是基于一个陈旧的类的,所以有人认为,在各种情况下,HashMap都优先于Hashtable。 

关于Properties 
有时侯,你可能想用一个hashtable来映射key的字符串到value的字符串。DOS、Windows和Unix中的环境字符串就有一些例子,如key的字符串PATH被映射到value的字符串C:\WINDOWS;C:\WINDOWS\SYSTEM。Hashtables是表示这些的一个简单的方法,但Java提供了另外一种方法。 

Java.util.Properties类是Hashtable的一个子类,设计用于String keys和values。Properties对象的用法同Hashtable的用法相象,但是类增加了两个节省时间的方法,你应该知道。 

Store()方法把一个Properties对象的内容以一种可读的形式保存到一个文件中。Load()方法正好相反,用来读取文件,并设定Properties对象来包含keys和values。 

注意,因为Properties扩展了Hashtable,你可以用超类的put()方法来添加不是String对象的keys和values。这是不可取的。另外,如果你将store()用于一个不包含String对象的Properties对象,store()将失败。作为put()和[object Object]get()的替代,你应该用setProperty()和getProperty(),它们用String参数。

ArrayList ,HashMap ,HashSet中放null

ArrayList ,HashMap ,HashSet中放null

list可以,hashmap的key 和vaule都可以放null ,hashset可以

对于Map里面的键和值是否可以为空的问题,答案是:不一定。对于HashMap来说,可以存放null键和null值,而HashTable则不可以。

            map.put(0, "0");
            map.put(1, null);
            map.put(null, "2");
            map.put(3, "");
            map.put(null, "4");

api上set定义:
一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对
e1 和 e2,并且最多包含一个 null 元素。

 s.add(null);
s.add(null);
System.out.println(s.size());   -------------1

关于使用ArrayList或HashMap获得更好的速度对hashmap,arraylist内存储的数据的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于arraylist linklist stack hashmap hashtable 的区别、ArrayList 与 HashMap 踩的坑、ArrayList 与LinkedList 区别 Hashtable与HashMap的区别、ArrayList ,HashMap ,HashSet中放null等相关内容,可以在本站寻找。

本文标签: