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)
  由于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);
}
}
}
输出结果:
上一篇: Scala集合Map和Set
下一篇: list和set集合的遍历
推荐阅读
-
Java 中初始化 List 集合的 6 种方式!
-
Java8利用stream的distinct()方法对list集合中的对象去重和抽取属性去重
-
ThinkPHP中的系统常量和预定义常量集合
-
详解ES6中的Map与Set集合
-
JS集合set类的实现与使用方法示例
-
List、Set集合系列之剖析HashSet存储原理(HashMap底层)
-
详谈Python中列表list,元祖tuple和numpy中的array区别
-
四种常见的数据结构、LinkedList、Set集合、Collection、Map总结
-
Java自学-集合框架 HashMap和Hashtable的区别
-
C#集合遍历时删除和增加元素的方法