今天上午去参加面试的java题目, 这个该怎么做?

JavaProg  •   •  34222 次浏览

题目:

需要存储如下信息:

+Name+ + country+
John Canada
Bob USA
Tom USA
Alice Canada
Alan Canada
Peter UK

现在删除数据,让每个country只保留一个人,只保留第一次出现那个
则剩下:

+Name+ + country+
John Canada
Bob USA
Peter UK

请选择一种数据结构,并用java代码实现

37 条回复
  • Pokemon
    #1

    存容易,删除的时候,淡淡的觉得应该用hash table

  • 狮子王
    #2

    用excel..countif..Xmlzj

  • beerguy
    #3

    做为一个编程业余爱好者, 我可以用 3个2 dimensional array做到

  • #4

    也是业余爱好者,但认为关键词是“只保留第一次出现的那个”,不是考运算速度可以用map of linkedlist/arraylist,map的key是country,linkedlist/arraylist是list of string

  • 滚雪球
    #5

    就是简单的HashMap然后loop一次,loop的时候把国家名字保存在一个临时的HashSet里面。
    每到新一行数据都检查已经保存的HashSet里面有没有这个国家,有的话删除这个元素,没有的话加到HashSet里面。HashMap是有remove方法的,所以很容易实现,注意iterator不要乱就行了。

  • west666
    #6

    不能用Hashmap一定要用LinkedHashMap因为是有序的

    import java.util.LinkedHashMap;
    import java.util.Map;


    public class TestGeneral {

    public static void main(String[] args) {

    //store orignal User and Country
    Map<String , String> hmOriginal = new LinkedHashMap<String , String>();
    hmOriginal.put("John", "Canada");
    hmOriginal.put("Bob", "USA");
    hmOriginal.put("Tom", "USA");
    hmOriginal.put("Alice", "Canada");
    hmOriginal.put("Alan", "Canada");
    hmOriginal.put("Peter", "UK");


    //store Updated data
    Map<String , String> hmUpdated = new LinkedHashMap<String , String>();

    for (Map.Entry<String, String> entry : hmOriginal.entrySet())
    {
    String sName = entry.getKey();
    String sCountry = entry.getValue();

    if( !hmUpdated.containsValue(sCountry))
    {
    hmUpdated.put(sName, sCountry);
    }

    }

    System.out.println("Original data is :"+hmOriginal );
    System.out.println("Updated data is :"+hmUpdated );

    }

    }

  • 小韩
    #7

    LinkedHashMap要保证遍历顺序不变,存放用linkedhashmap.删除把国家放在任意一个collection就可以了。已经有了就删掉数据,没有就保留数据,把国家放进collection.

  • #8

    这个方案的前提是人名不会重复。。。

  • #9

    如何保证“只保留第一次出现的那个”呢?

  • west666
    #10

    HashMap vs. LinkedHashMap
    使用 LinkedHashMap,输出是:(正确)
    Original data is :{John=Canada, Bob=USA, Tom=USA, Alice=Canada, Alan=Canada, Peter=UK}
    Updated data is :{John=Canada, Bob=USA, Peter=UK}

    使用 HashMap,输出是:(错误)
    Original data is :{Tom=USA, Bob=USA, Alice=Canada, Alan=Canada, John=Canada, Peter=UK}
    Updated data is :{Tom=USA, Alice=Canada, Peter=UK}

  • 滚雪球
    #11

    多谢指正我以为顺序不会随便变的,基础太差。

  • #12

    奇怪,这种小剋思也搞这么复杂?要趁墟员有什么用?

  • greenfox
    #13

    招程序员还要当场学程序的啊
    幸亏我不会编程。软件公司的人飘过。。

  • #14

    楼上都是0分for loop倒过来,简单map就搞定的事情,非要搞个不知道啥鬼LinkedHashMap。果然Java程序员都不考虑性能的,赞的

  • #15

    程序员不考虑各种的情况吗?比如重名

    正确答案请见我最开始的回复

  • cy1024
    #16

    c#的话就dictionary

  • west666
    #17

    请提供代码大佬
    你把代码写出来看看。

  • nevermoi
    #18

    最喜欢用python做这种数据结构类型的操作了origin = [
    ('john', 'canada'),
    ('bob', 'usa'),
    ('tom', 'usa'),
    ('alice', 'canada'),
    ('alan', 'canada'),
    ('peter', 'uk')
    ]

    temp = []
    def detect(t):
    if t[1] not in temp:
    temp.append(t[1])
    return True
    return False

    print(list(filter(lambda t: detect(t), origin)))

  • evan912
    #19

    print( filter(lambda t: detect(t), origin) )不用在指定list类型

  • sonatam
    #20

    做两个数组,然后两个i++ 不可以吗?只会vb的路过

  • lgland
    #21

    简单一点,附上代码,如果有要求,可以实现map接口,不过得改写一堆方法考点:
    1,面向对象的Java编程,数据结构一般要写一个class
    2,国家名不能重复,要考虑HasMap,把国家名作为一个key
    3,先国家名输入者,后面不能update,考虑在改写put方法,检验是否存在重复。

    import java.util.HashMap;
    import java.util.Map.Entry;

    public class MyMap {

    protected String name;
    protected String country;
    protected HashMap<String, String> map = new HashMap<String, String>();

    public MyMap() {}

    public void put(String name, String country) {
    if(!map.containsKey(country)) {
    map.put(country, name);
    }
    }

    public String toString() {
    String s = "";
    for(Entry<String, String> e : map.entrySet()) {
    s += e.getValue() + " " + e.getKey() + "n";
    }
    return s;
    }


    public static void main(String[] args) {

    MyMap myMap = new MyMap();
    myMap.put("John", "Canada");
    myMap.put("Bob", "USA");
    myMap.put("Tom", "USA");
    myMap.put("Alice", "Canada");
    myMap.put("Alan", "Canada");
    myMap.put("Peter", "UK");
    myMap.put("Peter", "China");

    System.out.println(myMap.toString());
    }

    }

    输出:
    John Canada
    Bob USA
    Peter UK
    Peter China

  • hunter_100
    #22

    C++的话是不是可以直接用std vector?vector<pair<Country, Name> >, 自定义predicate base on Country,然后stable sort,unique。

  • #23

    目测matlab两行搞定...data={
    'John' 'Canada';
    'Bob' 'USA';
    'Tom' 'USA';
    'Alice' 'Canada';
    'Alan' 'Canada';
    'Peter' 'UK';
    };

    % 开始
    [~, ia] = unique(data(:,2), 'stable');
    data(ia, :)
    % 结束

    具体实现可自行 google unique.m 文件 打开学习之... 你懂得

  • #24

    顶一下这个简洁明了~

  • しろ
    #25

    怎么这么久了还没settle呐FYI

  • xmulzz
    #26

    python这种二流语言就不要出来丢人了敢在我java面前丢人现眼。 不自量力。

  • xmulzz
    #27

    马特拉博你找死啊不自量力。 都没几个人用马特拉伯了

  • randomwalk
    #28

    别人都是不自量力是吧?厦门大学最牛逼了

  • しろ
    #29

    层主咋了被派森伤害过?

  • #30

    无所谓 只是轮子罢了

  • icky
    #31

    我。。。给跪了一句Python就解决了。。。(我还试了一下,真的是!)

    白老师也是码农吗?

  • しろ
    #32

    哈哈刚刚也有人觉得我像语文老师其实我是一个打酱油的无业仙女我会说?

  • kdkboy
    #33

    我要是it主管一句话写出来的 直接打死

    扩展性为0

    我现在不是主管 但是我写程序第一要求简单 可维护行高

  • しろ
    #34

    还好你不是我好怕怕噢

  • #35

    白老师竟然会这些!!!!!

  • しろ
    #36

    友邦惊诧紧老师觉得有何不妥?

  • JavaProg 楼主
    #37

    今天上午去参加面试的java题目, 这个该怎么做?

    题目:

    需要存储如下信息:

    +Name+ + country+
    John Canada
    Bob USA
    Tom USA
    Alice Canada
    Alan Canada
    Peter UK

    现在删除数据,让每个country只保留一个人,只保留第一次出现那个
    则剩下:

    +Name+ + country+
    John Canada
    Bob USA
    Peter UK

    请选择一种数据结构,并用java代码实现

狮城帮

狮城帮是关于分享和探索新加坡的地方

马上注册

已注册用户请 登录