2015-01-20 92 views
0

我试图搜索WWW,但未能找到答案。在这里也找不到一个。Arraylist - 如何获得特定元素/名称?

这是我的问题: 如何从ArrayList中的Customer获取特定名称(element?)? 我想象它看起来是这样的:

ArrayList<Customer> list = new ArrayList(); 

String name = list.get(2) // which would return the Customer at 2's place. 

但是,如果我想通过名称来搜索客户的东西,可以说,一个名为亚历克斯的客户?我怎么做?

奖励问题:如何删除该客户?

+0

该列表是否包含“Customer”或“String”类型的对象。你提供的两行代码相互矛盾。 – owaism 2015-01-20 18:55:53

+0

搜索背后的原因是什么?你想知道索引?你想知道列表有对象吗?等等,基于这些你可以使用不同的技术。 – kosa 2015-01-20 18:57:16

回答

3

正如其他人所说,这并不是那么高效,而HashMap会给你快速查找。如果您需要在遍历它,你需要使用一个迭代器从列表中删除项目

String targetName = "Jane"; 
    Customer result = null; 
    for (Customer c : list) { 
     if (targetName.equals(c.getName())) { 
      result = c; 
      break; 
     } 
    } 

:但是如果你必须遍历列表,你会做这样的。

String targetName = "Jane"; 
    List<Customer> list = new ArrayList<Customer>(); 
    Iterator<Customer> iter = list.iterator(); 
    while (iter.hasNext()) { 
     Customer c = iter.next(); 
     if (targetName.equals(c.getName())) { 
      iter.remove(); 
      break; 
     } 
    } 
1

使用ArrayList,您必须循环......如果可以,使用Map(HashMap,TreeMap)快速查找元素。 例如,如果您总是按名称查找,则此方法有效。 (使用名称作为地图的关键字)

1

除非您想遍历整个集合,将所需名称与当前名称进行比较,否则没有明确做出自己想要的操作的方法。如果你想要这种类型的功能,你可以尝试一个地图,如HashMap

0

为Customer对象实现equals和hashcode。使用客户名称属性。

使用ArrayList.indexof来查找元素的索引。使用Arraylist中的remove方法通过索引删除对象。

2

你将不得不在函数调用中使用类似这样的函数迭代你的数组。

void int HasName(string name){ 
    for(int i=0; i < list.size(); i++) { 
     String s = list.get(i).getName(); 
     //search the string 
     if(name.equals(s)) { 
      return i 
     } 
    } 
    return -1 
} 

如果您确实需要按名称搜索,请考虑查看HashMap。