在ArrayList中保存一个唯一的string列表

我从文本文件中读取数据,因此可能会有:

约翰
玛丽
约翰
利兹

我现在需要在ArrayList中获得3个独特的元素,因为文件输出中只有3个唯一的值(如上所示)。

我可以使用HashTable并添加信息,然后将其数据复制到列表中。 还有其他解决scheme吗?

为什么你需要把它存储在一个List ? 你真的需要订购数据还是支持基于索引的查询?

我会build议将数据存储在一个Set 。 如果sorting不重要,你应该使用HashSet 。 但是,如果你想保持顺序,你可以使用LinkedHashSet

如果你有一个包含重复的List ,并且你想要一个没有List ,你可以这样做:

 List<String> newList = new ArrayList<String>(new HashSet<String>(oldList)); 

也就是说,将旧列表包装到一个集合中,以删除重复项目并将其重新包装在列表中。

您可以在添加之前检查list.contains() 。

 if(!list.contains(value)) { list.add(value); } 

我猜想这是显而易见的! 但是,将项目添加到HashSet,然后从这个集合创build一个列表会更有效率。

使用一个set而不是一个列表。 看看这里: Java集合教程 ,特别是在这里集: Java集教程

简而言之,组包含一些东西。 完美:)

这是我如何解决它:

 import groovy.io.*; def arr = ["5", "5", "7", "6", "7", "8", "0"] List<String> uniqueList = new ArrayList<String>(new HashSet<String>( arr.asList() )); System.out.println( uniqueList ) 
 class HashSetList<T extends Object> extends ArrayList<T> { private HashSet<Integer> _this = new HashSet<>(); @Override public boolean add(T obj) { if (_this.add(obj.hashCode())) { super.add(obj); return true; } return false; } } 

我现在使用那些小程序的结构,我的意思是说,为了让getter和setter具有唯一性,你没有多less开销。 此外,你可以重写hashCode来决定你的项目是否等于另一个项目。