欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

List集合和Set集合的区别

程序员文章站 2022-05-13 23:51:41
...

  List集合的详细特点:https://blog.csdn.net/weixin_43741599/article/details/91357999
  Set集合类似于一个罐子,程序可以依次把多个对象“丢进”Set集合,而Set集合通常不能记住元素的添加顺序。HashSet类是Set接口的典型实现类,大多数时候使用Set集合时就是使用这个实现类。当向 HashSet集合中存入一个元素时, HashSet会调用该对象的 hashCode()方法来得到该对象的hashCode值。这里就体现到Set集合无序性,还有不可重复,只能插入一个null值。Set的基本的特点如下:

 package com.gx.demo;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List; 
public class HashSetDemo {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
// 添加元素
set.add("B");
set.add("A");
set.add("D");
set.add("C");
set.add("I");
set.add("I");//它会检测是否有重复的,如果有重复的不会再添加 
set.add(null);//可以放入null,但只能放入一个null
System.out.println("第一次添加"+set);
 //通过哈希值来存储列表元素的位置
// 移除
set.remove("I");
System.out.println("删除后再打印"+set);
 //移除set列表中的list列表包含的元素
List<String> list = new ArrayList<>();
list.add("F");
list.add("G");
list.add("C");
list.add(null);
set.removeAll(list);
// 输出set
System.out.println("从set列表中移除list中的包含的元素"+set.toString());
// 遍历
System.out.println("foreach遍历:");
 for (String string : set) {
 System.out.print(string + "  ");
 }
// 迭代器遍历
System.out.println("\nIterator 迭代器 while:");
 Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + "  ");
	}
System.out.println("\nIterator 迭代器 for:");
 for (Iterator<String> iterator2 = set.iterator(); iterator2.hasNext();) {
String string = (String) iterator2.next();
System.out.print(string + "  ");
	}
// 获取元素个数
System.out.println("HashSet的元素格个数:" + set.size());
// HashSet中是否包含某个元素
System.out.println("HashSet中是否包含某个元素:" + set.contains("F"));
//清空set
set.clear();
System.out.println("set是否为空"+set.isEmpty());
		 }
	}
	````
输出结果:
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190609220617767.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc0MTU5OQ==,size_16,color_FFFFFF,t_70)
&emsp;&emsp;由于TreeSet是有序的,也支持Comparable和Comparator两种排序方式。其实,Comparable和Comparator的使用很相似,然后在这里就不在将Comparator。下面是Comparable的使用介绍:
````javascript
package com.gx.demo;

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class SetComparable {
public static void main(String[] args) {
Set<PersonComparable1> persons = new TreeSet<PersonComparable1>();
persons.add(new PersonComparable1("小A", 35));
 persons.add(new PersonComparable1("小B", 25));
 persons.add(new PersonComparable1("小C", 25));
 persons.add(new PersonComparable1("小D", 12));
 persons.add(new PersonComparable1("小X", 33));
 persons.add(new PersonComparable1("小M", 33));
 persons.add(new PersonComparable1("小E", 33));
 Iterator<PersonComparable1> it = persons.iterator();
while (it.hasNext()) {
PersonComparable1 person = (PersonComparable1) it.next();
System.out.println(person.getName()+"\t"+person.getAge());
	}
}
}
//Comparable 用来实现集合中元素的比较、排序的,Comparable 是在集合内部定义的方法实现的排序
class PersonComparable1  implements Comparable<PersonComparable1> {
private int age;
 private String name; 
 public PersonComparable1() {
}
public PersonComparable1(String name, int age) {
this.age = age;
 this.name = name;
}
 public int getAge() {
 return age;
}
 public void setAge(int age) {
this.age = age;
 }
 public String getName() {
return name;
 }
public void setName(String name) {
this.name = name;
 }
public int compareTo(PersonComparable1 o) {
// 从小到大 :this.age-o.age,从大到小:o.age-this.age
if (o.age != this.age) {
 return this.age-o.age;
 } else {
return this.name.compareTo(o.name);
  }
}
}

输出结果:
List集合和Set集合的区别