List集合和Set集合的区别

  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);
  }
}
}

输出结果:
在这里插入图片描述

发布了37 篇原创文章 · 获赞 8 · 访问量 5952

猜你喜欢

转载自blog.csdn.net/weixin_43741599/article/details/91358147