在Java ArrayList <String>中使用contains
如果我有一个String的ArrayList,它构成了Java中类的一部分,如下所示:
private ArrayList<String> rssFeedURLs;
如果我想在包含上面的ArrayList的类中使用一个方法,使用ArrayList包含检查一个String是否包含在这个ArrayList中,我相信我应该可以这样做,如下所示:
if (this.rssFeedURLs.contains(rssFeedURL)) {
其中rssFeedURL是一个string。
我是对还是错?
你是对的。 ArrayList.contains()testingequals(),而不是对象标识:
返回true当且仅当此列表包含至less一个元素e,使得(o == null?e == null:o.equals(e))
如果你有一个NullPointerExceptionexception,请validation你是否在构造函数或声明中初始化了你的列表。 例如:
private List<String> rssFeedURLs = new ArrayList<String>();
是的,这应该适用于string, 但如果你担心重复使用Set
。 这个集合可以防止重复而不必做任何事情。 一个HashSet
可以使用,但它是无序的,所以如果你想保持插入顺序你使用LinkedHashSet
。
你是对的,它应该工作; 也许你忘了实例化一些东西。 你的代码看起来像这样吗?
String rssFeedURL = "http://stackoverflow.com"; this.rssFeedURLS = new ArrayList<String>(); this.rssFeedURLS.add(rssFeedURL); if(this.rssFeedURLs.contains(rssFeedURL)) { // this code will execute }
作为参考,请注意以下条件也将执行如果您将此代码附加到上面:
String copyURL = new String(rssFeedURL); if(this.rssFeedURLs.contains(copyURL)) { // code will still execute because contains() checks equals() }
即使(rssFeedURL == copyURL)为false,rssFeedURL.equals(copyURL)也是如此。 包含方法关心equals方法。
也许你需要发布导致你的exception的代码。 如果以上是你所有的,也许你只是没有实际初始化数组。
使用包含在这里应该虽然工作。
你的问题不是很清楚。
- 你的代码到底在做什么? 给更多的代码。
- 你得到的错误是什么?
你说你得到一个空指针。 你不能得到一个空指针作为由contains()
返回的值。
但是,如果您的列表尚未初始化,则可能会发生NullPointerException
。 现在通过阅读你的问题,我会说,你在这里显示的是正确的,但也许你没有实例化列表。
要做到这一点(要添加一个提要的URL,如果它不在列表中):
if (!this.rssFeedURLs.contains(rssFeedURL)) { this.rssFeedURLs.add(rssFeedUrl); }
那么这个声明会做:
private ArrayList<String> rssFeedURLs = new ArrayList<String>();
或者稍后初始化您的列表,但在尝试访问其方法之前:
rssFeedUrls = new ArrayList<String>();
最后…你真的需要一个List
吗? 如果你不想重复,也许会更好。 如果保留sorting事项,请使用LinkedHashSet
。
正确…用string…当你偏离原语或string的时候事情就会改变,你需要实现hashcode / equals来获得所需的效果。
编辑:初始化您的ArrayList<String>
然后尝试添加一个项目。
你是对的 正如别人根据你的意见说,你可能没有初始化你的ArrayList。
我的观点是不同的:你声称你正在检查重复,这就是为什么你调用contains方法。 尝试使用HashSet
。 它应该更有效率 – 除非您需要保持URL的顺序出于任何原因。
感谢大家回答如此之快。 我总是可以使用一个集合,但我现在有ArrayList的工作。 问题是,在包含ArrayList的类的构造函数中,我没有说:
public RSS_Feed_Miner() { ... this.rssFeedURLs = new ArrayList<String>(); ... }
D'哦! 星期五下午。
ArrayList<String> newlyAddedTypes=new ArrayList<String>(); ..... newlyAddedTypes.add("test1"); newlyAddedTypes.add("test1"); newlyAddedTypes.add("test2"); if(newlyAddedTypes.contain("test"){ //called here } else{ }
在下面的代码中,我们将任务填充为arraylist,retrieveTaskidForDelete作为我们在任务填充的arraylist中添加值的方法,checkid是String.we需要检查string值是否包含在arraylist中。
String checkid; ArrayList<String> taskfilled=retrieveTaskidForDelete(); if(!taskfilled.contains(checkid)) { Toast.makeText(getContext(),"Yepiee Bingo"+ti.get(a),Toast.LENGTH_SHORT).show(); }