【问题标题】:Java Linked List searchJava 链表搜索
【发布时间】:2015-05-20 22:41:29
【问题描述】:

我有一个关于linked-lists 的问题。您将如何搜索看起来像这样的一个并找到 string "Freda"

private LinkedList<Boat> boats = new LinkedList<Boat>();

boats.add(new Boat(1, "Ed", 3));

boats.add(new Boat(2, "Fred", 7));

boats.add(new Boat(3, "Freda", 5));

【问题讨论】:

标签: java linked-list


【解决方案1】:

我假设,getName 是返回船名的 getter。

for(int i=0;i<boats.size();i++){
  if(searchedWord.equals(boats.get(i).getName()){
   //do your operation here
  }
}

【讨论】:

    【解决方案2】:

    遍历您的列表,然后搜索您的价值

    for(Boat a: boats){
        if(a.name.equals("Freda")){ // name is the variable you have used to store "Fread" 
            //   sout("Found");
             break;
         }
    }
    

    【讨论】:

    【解决方案3】:

    假设你的船上有 getter 和 setter:

      public Boat search (LinkedList<Boat> list, String searchedName) {
          for (Boat boat : list) {
             if(boat.getName().equals(searchedName) {
                   return boat;
                             }
                     }
         throw new IllegalArgumentExcetion("This boat was not found");
         }
    

    【讨论】:

      【解决方案4】:

      正如已经在 cmets 中添加的那样,您应该选择 Map&lt;Key,Value&gt; Pair Approach

      private Map<String,Boat> boats = new HashMap<String,Boat>();
      boats.put("ED",new Boat(1, "Ed", 3));
      boats.put("Fred",new Boat(2, "Fred", 5));
      boats.put("Ted",new Boat(3, "Ted", 8));
      

      那么当你想搜索时,你总是可以这样做:

      boats.get("Fred");
      

      【讨论】:

        【解决方案5】:

        如果你想搜索东西,你想使用像 Data Store 这样的索引集合: https://github.com/jparams/data-store

        例子:

        Store<Boat> store = new MemoryStore<>() ;
        store.add(new Boat(1, "Ed", 3));
        store.add(new Boat(2, "Fred", 7));
        store.add(new Boat(3, "Freda", 5));
        store.index("name", Boat::getName);
        Boat boat = store.getFirst("name", "Ed");
        

        使用数据存储,您可以创建不区分大小写的索引和各种很酷的东西。如果您要进行大量查找,那么您肯定希望使用这样的库来进行循环。

        【讨论】:

          【解决方案6】:

          您可以通过过滤列表流轻松解决它;

          final List<Boat> ed = boats.stream().filter(boat -> boat.name.equals("Ed")).collect(Collectors.toList());
          

          这将返回名称为Ed的所有船只的列表

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-08-03
            • 2016-03-23
            • 1970-01-01
            • 2014-04-07
            • 2015-06-14
            • 2020-04-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多