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()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)