Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:迭代HashMap-需要算法_Java_Algorithm_List_Iterator - Fatal编程技术网

Java:迭代HashMap-需要算法

Java:迭代HashMap-需要算法,java,algorithm,list,iterator,Java,Algorithm,List,Iterator,我有一张名单,比如说8个名字:乔、鲍勃、安德鲁、比尔、查理、莎拉、安、维克托 姓名的计数可能不同** 1) 我应该用什么作为名单?Hashmap,Vector,Hashtable,List,ArrayList 2) 我需要像这样匹配他们:乔·鲍勃、安德鲁·比尔、查理·莎拉、安·维克托。你能给我举个例子说明如何做一个循环吗 谢谢大家! 哈希映射没有顺序。如果要插入所需的名称列表,请执行以下操作(使用数组): for(int i=0;i

我有一张名单,比如说8个名字:乔、鲍勃、安德鲁、比尔、查理、莎拉、安、维克托

姓名的计数可能不同**

1) 我应该用什么作为名单?Hashmap,Vector,Hashtable,List,ArrayList

2) 我需要像这样匹配他们:乔·鲍勃、安德鲁·比尔、查理·莎拉、安·维克托。你能给我举个例子说明如何做一个循环吗


谢谢大家!

哈希映射没有顺序。如果要插入所需的名称列表,请执行以下操作(使用数组):

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;
    ...
}