Ven*_*kat 43 java collections arraylist hashmap
在Java中,ArrayList并HashMap用作集合.但我无法理解我们应该在哪些情况下使用ArrayList以及使用哪些时间HashMap.两者之间的主要区别是什么?
Dav*_*ton 79
您是专门询问有关ArrayList和HashMap的内容,但我认为要完全理解您需要了解的集合框架.因此,ArrayList实现List接口,HashMap实现Map接口.所以真正的问题是你何时想要使用List以及何时想要使用Map.这是Java API文档很有帮助的地方.
列表:
有序集合(也称为序列).该接口的用户可以精确控制列表中每个元素的插入位置.用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素.
地图:
将键映射到值的对象.地图不能包含重复的键; 每个键最多可以映射一个值.
因此,正如其他答案所讨论的那样,列表接口(ArrayList)是您使用索引访问的对象的有序集合,非常类似于数组(在ArrayList的情况下,顾名思义,它只是一个数组中的数组)背景,但处理数组的很多细节都是为你处理的).当您想要按照排序顺序(添加它们的顺序,或者实际上添加对象时指定的列表中的位置)时,可以使用ArrayList.
另一方面,Map获取一个对象并将其用作另一个对象(值)的键(索引).因此,假设您拥有具有唯一ID的对象,并且您知道您希望在某些时候通过ID访问这些对象,Map将使您更容易(并且更快/更高效).HashMap实现使用密钥对象的哈希值来定位它的存储位置,因此不再保证值的顺序.然而,Java API中可以提供其他类,例如LinkedHashMap,它使用哈希表来存储键/值对,还按照添加顺序维护键的List(LinkedList),这样您就可以按照添加的顺序(如果需要)再次访问这些项目.
Mar*_*aux 16
如果使用an ArrayList,则必须使用索引(int类型)访问元素.使用a HashMap,您可以通过其他类型的索引访问它们(例如,a String)
HashMap<String, Book> books = new HashMap<String, Book>();
// String is the type of the index (the key)
// and Book is the type of the elements (the values)
// Like with an arraylist: ArrayList<Book> books = ...;
// Now you have to store the elements with a string key:
books.put("Harry Potter III", new Book("JK Rownling", 456, "Harry Potter"));
// Now you can access the elements by using a String index
Book book = books.get("Harry Potter III");
Run Code Online (Sandbox Code Playgroud)
这是不可能的(或者更难)ArrayList.访问元素的唯一好方法ArrayList是通过索引号获取元素.
所以,这意味着HashMap你可以使用你想要的每种类型的键.
另一个有用的例子是游戏:你有一组图像,你想要翻转它们.那么,你编写一个图像翻转方法,然后存储翻转的结果:
HashMap<BufferedImage, BufferedImage> flipped = new HashMap<BufferedImage, BufferedImage>();
BufferedImage player = ...; // On this image the player walks to the left.
BufferedImage flippedPlayer = flip(player); // On this image the player walks to the right.
flipped.put(player, flippedPlayer);
// Now you can access the flipped instance by doing this:
flipped.get(player);
Run Code Online (Sandbox Code Playgroud)
你翻转了一次播放器,然后存储它.您可以访问一个BufferedImage具有BufferedImage关键型的HashMap.
我希望你理解我的第二个例子.
Kan*_*ath 14
不是特定于Java的问题.看来你需要一个关于数据结构的"入门".尝试谷歌搜索"你应该使用什么数据结构"
请尝试此链接http://www.devx.com/tips/Tip/14639
从链接:
以下是将最常用的数据结构与特定需求进行匹配的一些技巧.
如果要以键值对的形式访问存储的数据,则散列表或类似的数据结构是很好的候选者.例如,如果您正在获取员工的姓名,则结果可以以哈希表的形式作为(名称,值)对返回.但是,如果要返回多个员工的名称,则直接返回哈希表并不是一个好主意.请记住,密钥必须是唯一的,否则您之前的值将被覆盖.
当您需要顺序甚至随机访问时,这是一个不错的选择.此外,如果数据大小最初未知,和/或将动态增长,则使用List或Vector是合适的.例如,要存储JDBC ResultSet的结果,可以使用java.util.LinkedList.然而,如果您正在寻找可调整大小的数组,请使用java.util.ArrayList类.
永远不要低估数组.大多数情况下,当我们必须使用对象列表时,我们倾向于考虑使用向量或列表.但是,如果集合的大小已知并且不会更改,则可以将数组视为潜在的数据结构.访问数组的元素比使用向量或列表更快.这很明显,因为你需要的只是一个索引.额外的get方法调用没有开销.
4.Combinations
有时,最好使用上述方法的组合.例如,您可以使用哈希表列表来满足特定需求.
从JDK 1.2开始,您还设置了类java.util.TreeSet,这对于没有重复项的排序集非常有用.这些课程最好的一点是他们都遵守某些界面,所以你不必担心具体细节.例如,请查看以下代码.
// ...
List list = new ArrayList();
list.add(
Run Code Online (Sandbox Code Playgroud)