Java:迭代HashMap-需要算法
我有一张名单,比如说8个名字:乔、鲍勃、安德鲁、比尔、查理、莎拉、安、维克托 姓名的计数可能不同** 1) 我应该用什么作为名单?Hashmap,Vector,Hashtable,List,ArrayList 2) 我需要像这样匹配他们:乔·鲍勃、安德鲁·比尔、查理·莎拉、安·维克托。你能给我举个例子说明如何做一个循环吗Java:迭代HashMap-需要算法,java,algorithm,list,iterator,Java,Algorithm,List,Iterator,我有一张名单,比如说8个名字:乔、鲍勃、安德鲁、比尔、查理、莎拉、安、维克托 姓名的计数可能不同** 1) 我应该用什么作为名单?Hashmap,Vector,Hashtable,List,ArrayList 2) 我需要像这样匹配他们:乔·鲍勃、安德鲁·比尔、查理·莎拉、安·维克托。你能给我举个例子说明如何做一个循环吗 谢谢大家! 哈希映射没有顺序。如果要插入所需的名称列表,请执行以下操作(使用数组): for(int i=0;i
谢谢大家! 哈希映射没有顺序。如果要插入所需的名称列表,请执行以下操作(使用数组):
for(int i=0;i
不太清楚“关联”这些名称是什么意思,以及需要如何处理它们。此外,您也没有说明名称是否唯一
您可以通过以下方式配对名称:
String input = "Joe, Bob, Andrew, Bill, Charlie, Sarah, Ann, Victor";
String names[] = input.split(",");
Map<String, String> output = new HashMap<String, String>();
for (int i=0; i<names.length; i+=2) {
output.put(names[i].trim(), names[i+1].trim());
}
String input = "Joe, Bob, Andrew, Bill, Charlie, Sarah, Ann, Victor";
String names[] = input.split(",");
Map<String, String> output = new HashMap<String, String>();
for (int i=0; i<names.length; i+=2) {
String first = names[i].trim();
String second = names[i+1].trim();
output.put(first, second);
output.put(second, first);
}
如果您还需要将Bob与Joe联系起来,您可以这样做:
String input = "Joe, Bob, Andrew, Bill, Charlie, Sarah, Ann, Victor";
String names[] = input.split(",");
Map<String, String> output = new HashMap<String, String>();
for (int i=0; i<names.length; i+=2) {
output.put(names[i].trim(), names[i+1].trim());
}
String input = "Joe, Bob, Andrew, Bill, Charlie, Sarah, Ann, Victor";
String names[] = input.split(",");
Map<String, String> output = new HashMap<String, String>();
for (int i=0; i<names.length; i+=2) {
String first = names[i].trim();
String second = names[i+1].trim();
output.put(first, second);
output.put(second, first);
}
你的选择应该取决于你想要这些名字的目的。您想在列表中高效搜索给定的姓氏吗?如果是,那么你应该遵循Anon的建议 否则,您可以创建一个类,在其中保存每个人的信息(名字、姓氏、电话等),并使用向量保存该类的实例。此类的一个示例可以是:
class PersonDetails {
String firstName;
String lastName;
public PersonDetails(String fn, String ln) {
firstName = fn;
lastName = ln;
}
}
要在向量中插入名称,可以使用如下内容:
for(int i = 0; i < nameArray.length; i += 2) {
vector.add(new PersonDetails(nameArray[i], nameArray[i+1]));
}
for(int i=0;i
如果您有一个数组开始,但希望在处理元素时删除它们,请首先将其转换为某种类型的列表。此外,从ArrayList
的开头删除项目可能非常昂贵,因此如果您有很多名称,您可能需要使用LinkedList
(虽然很少有理由在性能和内存利用率之间实际使用它,但最好有一个循环的列表
,但这不是Java的标准配置)
因此,在您的情况下,您知道您将按顺序处理列表,因此我能想到的最有效的方法是创建一个ArrayList
,然后将其反转,然后从末尾删除,如下所示:
private Map matchNames(String[] names) {
List namesList = new ArrayList(Arrays.asList(names));
Collections.reverse(namesList);
Map result = new HashMap(namesList.size() / 2);
while (!namesList.isEmpty()) {
result.put(namesList.remove(namesList.size() - 1),
namesList.remove(namesList.size() - 1));
}
return result;
}
1) 我应该用什么作为名单?Hashmap,Vector,Hashtable,List,ArrayList
好的,这取决于您的需要:)但是,由于这个问题以及您混合了收集接口(例如List
)和具体实现(例如ArrayList
或Vector
),我认为您应该从基础开始。Java(tm)教程提供了一个非常棒的资源,非常推荐阅读
首先,您需要了解各种集合接口及其用途。然后您将选择一个具体的实现。我在下面引用的教程部分将帮助您完成第一步:
下面的列表描述了核心
集合接口:
集合
-集合层次结构的根。收藏
表示一组对象,称为
它的要素。集合
界面
是最小公分母
所有集合都实现并使用
传递集合并将其传递给
在达到最大值时操纵它们
需要一般性。某些类型的
集合允许重复元素,
其他人则不然。有些是订购的
还有一些是无序的。爪哇
平台不提供任何直接服务
此接口的实现,但
提供了更多功能的实现
特定子接口,如Set
和列表
。另见第节
Set
-不能包含重复元素的集合。这
接口为数学集合建模
抽象,用于表示
集合,如包含
扑克手,组成一个游戏的课程
学生的时间表,或过程
在机器上运行。另见第节
列表
-有序集合(有时称为序列)。列表
可以包含重复的元素。这个
列表的用户通常具有精确的
控制每个列表中的位置
元素已插入并可以访问
元素的整数索引
(位置)。如果使用了向量
,
你熟悉将军吗
列表的味道
。另见第节
队列
-处理前用于保存多个元素的集合。
除了基本的收集操作外,还有
队列提供了额外的插入,
提取和检查操作
通常是队列,但不是
必须在FIFO中对元素进行排序
(先进先出)方式。在…之间
例外情况是优先级队列,
哪些元素按照顺序排列
提供的比较器或元件的
自然有序。不管怎样
已使用排序,则为队列的头
是要删除的元素
通过调用remove
或poll
。先进先出
队列中,将插入所有新元素
在队伍的末尾。其他种类
不同的队列可能使用不同的放置方式
规则。每个队列
实现必须
指定其排序属性。阿尔索
见第节
Map
-将键映射到值的对象。地图不能包含重复的内容
钥匙;每个键最多可以映射到一个
价值如果您使用了哈希表
,
你已经熟悉了
地图的基础知识
。另见第节
在您的情况下,我认为您不需要队列
,我不确定您是否需要映射
,我认为您希望允许重复元素,因此您不需要集合
,这就给我们留下了一个列表
关于混凝土
private Map matchNames(String[] names) {
List namesList = new ArrayList(Arrays.asList(names));
Collections.reverse(namesList);
Map result = new HashMap(namesList.size() / 2);
while (!namesList.isEmpty()) {
result.put(namesList.remove(namesList.size() - 1),
namesList.remove(namesList.size() - 1));
}
return result;
}
public class Couple {
private name1;
private name2;
...
}