与ArrayList比较

时间:2015-03-03 17:39:26

标签: java arraylist parallel-arrays

我的程序要求能够从电话簿中删除姓名和号码。我已经删除工作,但它只删除文本框对应的ArrayList索引。我需要能够通过将它们输入到texbox中来删除其各自的arraylists中的名称和号码。对不起,如果有另一个答案,我想我真的不知道如何正确地说出来。我的代码如下。

ArrayList<String> Names = new ArrayList<String>();
ArrayList<String> Numbers = new ArrayList<String>();

if(e.getSource() == DeleteBtn)
{


if (NameTxt.getText() != null)
{
for( int i=0; i<= NamesList.size(); i++)
{
if(NamesList.contains(NameTxt.getText()))
{
NamesList.remove(i);
System.out.println(NamesList.size());

}                                                    
}
}

if (PhoneTxt.getText() != null)
{
for( int i=0; i<= NumbersList.size(); i++)
{
if(NumbersList.contains(PhoneTxt.getText()))
{
NumbersList.remove(i);
System.out.println(NumbersList.size());

}                                                    
}
}
}

6 个答案:

答案 0 :(得分:2)

如果您必须使用ArrayLists,那么您可以考虑使用对的ArrayList。 您可以创建自己的类,比如PhoneBookEntry。

class PhoneBookEntry {
    String _name;
    String _phone;
    // etc...
}

ArrayList<PhoneBookEntry>

答案 1 :(得分:1)

考虑使用HashMap而不是ArrayLists。

HashMap<String, String> numbersAndNames = new HashMap<String, String>();
numbersAndNames.put("John", "123 456 789");

答案 2 :(得分:0)

如果我是你,我会重新考虑我的逻辑。我会尽量避免为你发布代码,以免给你答案/为你做工作但是......

  1. 我只看到你修改了NamesList变量。您没有修改Names或Numbers ArrayList变量。

  2. 我会把你的'包含if语句'放在其他地方。您检查NameList是否包含NameText很多次。我不明白为什么你需要多次检查它。

  3. 如果你想变得聪明,你可以完全取消数组,只需使用getIndex()方法在java中产生一些效果......它获取对应于NameText的索引(我很模糊故意,所以想想我在说什么。

  4. 如果需要,可以使用HashMap,但这不是必需的。

答案 3 :(得分:0)

建议使用其他类来跟踪名称/数字组合。

ArrayList contacts = new ArrayList();

if(e.getSource() == DeleteBtn) {

   if (NameTxt.getText() != null) {
      for( int i=0; i<= contacts.size(); i++) {
         if(contacts.getName().contains(NameTxt.getText())) {
           contacts.remove(i);
           System.out.println(contacts.size());

      }                                                    
   }
}

public class PhoneContact {
   private String name;
   private String number;
   /*
      Getters and Setters
   */
 }

答案 4 :(得分:0)

首先,NumbersList.contains(PhoneTxt.getText())会在列表中PhoneTxt.getText() 时返回。

您想要检查的是NumbersList.get(i).equals(PhoneTxt.getText()) 注释,我使用的是equals()而不是==运营商

答案 5 :(得分:0)

我的朋友实际上找到了答案,他只是添加了另一个ArrayList(i),感谢所有发布答案的人,因为他们给了我深思熟虑,只是觉得答案的逻辑不起作用但我被证明了错了,这是任何有兴趣的人的代码。

if(e.getSource() == DeleteBtn)
{


if (NameTxt.getText() != null)
{
for( int i=0; i<= NamesList.size(); i++)
{
if(NamesList.contains(NameTxt.getText()))
{
NamesList.remove(i);
NamesList.remove(i);

System.out.println(NamesList.size());
System.out.println(NumbersList.size());

}                                                    
}
}

if (PhoneTxt.getText() != null)
{
for( int i=0; i<= NumbersList.size(); i++)
{
if(NumbersList.contains(PhoneTxt.getText()))
{
NumbersList.remove(i);
NamesList.remove(i);

System.out.println(NamesList.size());
System.out.println(NumbersList.size());

}                                                    
}
}
}