如何去除List集合中重复的元素

如何去除List集合中重复的元素,第1张

1、通过循环进行删除

public static void removeDuplicate(List list) {

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

for ( int j = list.size() - 1 j >ij -- ) {

if (list.get(j).equals(list.get(i))) {

list.remove(j)}}}

System.out.println(list)}

2、通过HashSet删除

public static void removeDuplicate(List list) {

HashSet h = new HashSet(list)

list.clear()

list.addAll(h)

System.out.println(list)}

扩展资料:

List集合代表一个元素有序,可重复的集合,集合中每个元素都有对应的顺序索引。List接口中增加了一些根据索引 *** 作元素的方法

void add(int index,E element )  在列表的指定位置插入该元素。

boolean addAll(int index,Collection c)  将集合c包含的所有元素都插入到List集合的index处。

Object get(int index)    返回集合index索引出的元素。

List额外提供的一个listIterator()方法,提供了专门 *** 作List的方法。

ListIterator接口在Iterator的基础上增加了如下方法:

boolean hasPrevious(): 返回该迭代器关联的集合是否还有上一个元素。

Object previous(): 返回该迭代器的上一个元素。

void add((E e): 在指定位置插入一个元素。

参考资料来源:百度百科——list

因为用到list,要去除重复数据,尝试了几种方法。记录于此。。。

测试数据:

List<string>li1 = new List<string>{ "8", "8", "9", "9" ,"0","9"}

List<string>li2 = new List<string>{ "张三", "张三", "李四", "张三", "王五", "李四" }

List<string>li3 = new List<string>{ "A", "A", "C", "A", "C", "D" }

List<string>li4 = new List<string>{ "12", "18", "19", "19", "10", "19" }

方法一:

HashSet<string>hs = new HashSet<string>(li1)//此时已经去掉重复的数据保存在hashset中

方法二:

for (int i = 0i <li2.Counti++) //外循环是循环的次数

{

for (int j = li2.Count - 1 j >ij--) //内循环是 外循环一次比较的次数

{

if (li2[i] == li2[j])

{

li2.RemoveAt(j)

}

}

}

方法三:

  //把相同的用null代替。

for (int i = 0i <li3.Counti++)

{

for (int j = 0j <li3.Countj++)

{

if (i == j) continue

if (li3[i] == li3[j])

{

li3[j] = "null"

}

}

}

方法四:

//这方法跟上面的一样,只是变了逻辑

for (int i = 0i <li4.Count - 1i++)

{

for (int j = 0j <li4.Count j++)

{

if (i != j)

{

if (li4[i] == li4[j])

{

li4[j] = "null"

}

}

}

}

最后输出看结果

Console.WriteLine("li1去除重复后的值为")

hs.ToList().ForEach(item =>Console.WriteLine(item))

Console.WriteLine("li2去除重复后的值为")

li2.ForEach(item =>Console.WriteLine(item))

Console.WriteLine("li3去除重复后的值为")

li3.ForEach(item =>Console.WriteLine(item))

Console.WriteLine("li4去除重复后的值为")

li4.ForEach(item =>Console.WriteLine(item))

null我没去掉。用的时候去掉即可。

当然。还有许多办法。比如linq Distinct 等等都可以,看看网上的这个例子:去掉modelList中title重复的内容,不区分大小写

class Program

{

static void Main(string[] args)

{

List<Model>modelList = new List<Model>()

{ new Model() { ID = 1, Title = "abcde" },

new Model() { ID = 2, Title = "ABCDE" },

new Model(){ ID = 3, Title = "AbcdE" },

new Model() { ID = 4, Title = "A" },

new Model() { ID = 5, Title = "a" }

}

Console.Read()

}

}

public class Model

{

public int ID { getset}

public string Title { getset}

}

解决方案一:这里比较的前提是对象的哈希代码相等。否则不会比较,因为哈希代码不相等。两个对象显然不相等

//定义一个类继承IEqualityComparer接口

public class ModelComparer : IEqualityComparer<Model>

{

public bool Equals(Model x, Model y)

{

return x.Title.ToUpper() == y.Title.ToUpper()

}

public int GetHashCode(Model obj)

{

return obj.Title.ToUpper().GetHashCode()

}

}

调用:

modelList = modelList.Distinct(new ModelComparer()).ToList()

解决方案二:

var title = modelList.GroupBy(m =>m.Title.ToLower().Trim()).Select(m =>new { ID = m.FirstOrDefault().ID })

modelList = modelList.Where(m =>title.Select(mo =>mo.ID).Contains(m.ID)).ToList()

foreach (var item in modelList)

{

Console.WriteLine(item.ID + "\t" + item.Title)

}

当然。如果你仅仅比较两个值是否相等。

List<string>li1 = new List<string>{ "8", "8", "9", "8", "0", "9" }

li1 = li1.Distinct().ToList()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9560265.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存