Java ArrayList重复删除

Java ArrayList重复删除,java,Java,这是我的密码: public static void deleteDuplicates(ArrayList<String> list){ ArrayList<String> newList = new ArrayList<String>(); HashSet<String> set = new HashSet<String>(); for(int i = 0; i < list.size(); i++){

这是我的密码:

public static void deleteDuplicates(ArrayList<String> list){
    ArrayList<String> newList = new ArrayList<String>();
    HashSet<String> set = new HashSet<String>();

    for(int i = 0; i < list.size(); i++){
        set.add(list.get(i));
    }

    newList.addAll(set);
    return newList;
}
我得到的结果是:

3, 2, 4, 1, 5

有人能解释一下为什么这不正常吗?

更改
HashSet

哈希表和链表的集合接口实现,具有可预测的迭代顺序

此外,请记住:

公共静态无效删除重复项(列表){
List newList=newarraylist();
Set Set=newlinkedhashset();
//代码的其余部分
}

更改
哈希集

哈希表和链表的集合接口实现,具有可预测的迭代顺序

此外,请记住:

公共静态无效删除重复项(列表){
List newList=newarraylist();
Set Set=newlinkedhashset();
//代码的其余部分
}

引用HashSet类文档:

它不保证集合的迭代顺序;在里面 特别是,它不能保证订单保持不变 随着时间的推移


引用HashSet类文档:

它不保证集合的迭代顺序;在里面 特别是,它不能保证订单保持不变 随着时间的推移


我相信有一种更有效的方法,但这里有一个n^2算法的想法

public static void deleteDuplicates(ArrayList<String> list){
ArrayList<String> newList = new ArrayList<String>();

for (int i = 0; i < list.size(); i++){

boolean exists = false;
String str = list.get(i);
for (int j = 0; j < newList.size(); j++){
if (newList.get(j).compareTo(str)==0){
exists = true;
break;
}
}
if (!exists) newList.add(str);
}
return newList;
}
公共静态void deleteDuplicates(ArrayList列表){
ArrayList newList=新的ArrayList();
对于(int i=0;i
我相信有一种更有效的方法,但这里有一个n^2算法的想法

public static void deleteDuplicates(ArrayList<String> list){
ArrayList<String> newList = new ArrayList<String>();

for (int i = 0; i < list.size(); i++){

boolean exists = false;
String str = list.get(i);
for (int j = 0; j < newList.size(); j++){
if (newList.get(j).compareTo(str)==0){
exists = true;
break;
}
}
if (!exists) newList.add(str);
}
return newList;
}
公共静态void deleteDuplicates(ArrayList列表){
ArrayList newList=新的ArrayList();
对于(int i=0;i
设置数据结构不维护顺序。但是如果你想排序,那么你可以使用树集。@Shivamkara你的意思是
HashSet
,因为确实如此。@LuiggiMendoza不,我是指任何数据结构集。链接Hashset在内部保留一个链接列表以保持秩序。啊,我想出来了。谢谢,我不知道hashset。LinkedHashSet维护元素插入的顺序。树集合根据元素的自然顺序对元素进行排序。集合数据结构不保持顺序。但是如果你想排序,那么你可以使用树集。@Shivamkara你的意思是
HashSet
,因为确实如此。@LuiggiMendoza不,我是指任何数据结构集。链接Hashset在内部保留一个链接列表以保持秩序。啊,我想出来了。谢谢,我不知道hashset。LinkedHashSet维护元素插入的顺序。TreeSet根据元素的自然顺序对元素进行排序。@user1327636别忘了编程面向接口,而不是类实现(检查我答案中提供的链接)。@user1327636别忘了编程面向接口,而不是类实现(检查我答案中提供的链接)。
public static void deleteDuplicates(ArrayList<String> list){
ArrayList<String> newList = new ArrayList<String>();

for (int i = 0; i < list.size(); i++){

boolean exists = false;
String str = list.get(i);
for (int j = 0; j < newList.size(); j++){
if (newList.get(j).compareTo(str)==0){
exists = true;
break;
}
}
if (!exists) newList.add(str);
}
return newList;
}