在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
来决定你的项目是否等于另一个项目。