19.集合类-HashSet和TreeSet
19.1 知识点
回顾Java中集合类关系
// Collection(接口)
// __________|__________
// | |
// Set(接口) List(接口)
// ___|____ _____|_____
// | | | |
//HashSet SortedSet ArrayList LinkedList
// |
// TreeSet
//Collection接口中的方法
//1.add(E e) 添加元素
//2.remove(Object o) 移除元素
//3.clear() 清空元素
//4.isEmpty() 是否为空
//5.iterator() 获取迭代器,可以用于遍历
//6.size() 集合中元素个数
//7.contains() 判断元素是否存在
//8.toArray() 将容器中元素转为数组
HashSet和TreeSet的区别
//相同点:他们都不允许存储重复的元素,如果传入重复的只会记录一个
// 他们相对上节课的ArrayList和LinkedList最大的使用区别就是他们可以去重
// 都不能像ArrayList和LinkedList通过索引获取或修改元素
//不同点:他们的底层数据结构不同,HashSet底层结构是哈希表,TreeSet底层结构是树
// TreeSet是有序排列的(会自动将加入元素进行排序),HashSet不一定有序
// TreeSet相对HashSet由于多继承了接口,所以有更多的方法可以使用
//注意:TreeSet具有排序功能
// 元素是数字时,按照大小升序排列
// 元素是字符串时,按照字符的编码值升序排列
// 元素是自定义类时,可以继承Comparable接口 重载其中的方法
// 特别是compareTo方法,它用于制定排序规则
HashSet和TreeSet的常用方法
//1.初始化
HashSet<Integer> hashSet = new HashSet<>();
TreeSet<Integer> treeSet = new TreeSet<>();
//2.增
treeSet.add(3);
treeSet.add(2);
treeSet.add(1);
treeSet.add(1);
treeSet.add(1);
treeSet.add(1);
treeSet.add(0); // [0, 1, 2, 3],重复元素只保留一个
//3.删
//这两个容器都没有通过索引取移除的重载
treeSet.remove(0); // [1, 2, 3],移除元素0
//4.查
if (treeSet.contains(0)) System.out.println("存在0元素"); // 未执行,0元素已被移除
//5.没有改
//6.遍历
// 只有两种遍历 foreach语句和迭代器
for (Integer i : treeSet)
System.out.println(i); // 1 2 3
Iterator<Integer> it = treeSet.iterator();
while (it.hasNext()) System.out.println(it.next()); // 1 2 3
TreeSet独有的方法
//1.first() 返回当前第一个元素
System.out.println(treeSet.first()); // 1
//2.pollFirst() 取出当前第一个元素
System.out.println(treeSet.pollFirst()); // 1,取出并移除第一个元素
System.out.println("*********************");
for (Integer i : treeSet)
System.out.println(i); // 2 3
//3.last() 返回最后一个元素
System.out.println(treeSet.last()); // 3
//4.pollLast() 取出当前最后一个元素
System.out.println(treeSet.pollLast()); // 3,取出并移除最后一个元素
System.out.println("*********************");
for (Integer i : treeSet)
System.out.println(i); // 2
treeSet.add(1);
treeSet.add(3);
treeSet.add(4);
//5.headSet(E obj) 返回一个新Set集合,新集合是传入对象之前的所有对象
System.out.println("*********************");
SortedSet<Integer> newSet = treeSet.headSet(3);//返回3之前所有对象
for (Integer i : newSet)
System.out.println(i); // 1 2
//6.subSet(E b, E e) 返回一个新Set集合,新集合是传入对象b 和 e之间的所有对象,左包含,右不包含
//7.tailSet(E obj) 返回一个新Set集合,新集合是传入对象(包含)之后的所有对象
//等等
总结
Set相关集合的特点是
1.不会存储重复元素,如果我们有去重需求可以选择他们
2.只能遍历获取所有元素,不能单独获取中间的某个元素
3.TreeSet会自动排序,可以取出(弹出)首尾
19.2 知识点代码
import java.util.HashSet;
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;
public class Lesson19_集合类_HashSet和TreeSet
{
public static void main(String[] args)
{
//知识点1:回顾Java中集合类关系
// Collection(接口)
// __________|__________
// | |
// Set(接口) List(接口)
// ___|____ _____|_____
// | | | |
//HashSet SortedSet ArrayList LinkedList
// |
// TreeSet
//Collection接口中的方法
//1.add(E e) 添加元素
//2.remove(Object o) 移除元素
//3.clear() 清空元素
//4.isEmpty() 是否为空
//5.iterator() 获取迭代器,可以用于遍历
//6.size() 集合中元素个数
//7.contains() 判断元素是否存在
//8.toArray() 将容器中元素转为数组
//知识点2:HashSet和TreeSet的区别
//相同点:他们都不允许存储重复的元素,如果传入重复的只会记录一个
// 他们相对上节课的ArrayList和LinkedList最大的使用区别就是他们可以去重
// 都不能像ArrayList和LinkedList通过索引获取或修改元素
//不同点:他们的底层数据结构不同,HashSet底层结构是哈希表,TreeSet底层结构是树
// TreeSet是有序排列的(会自动将加入元素进行排序),HashSet不一定有序
// TreeSet相对HashSet由于多继承了接口,所以有更多的方法可以使用
//注意:TreeSet具有排序功能
// 元素是数字时,按照大小升序排列
// 元素是字符串时,按照字符的编码值升序排列
// 元素是自定义类时,可以继承Comparable接口 重载其中的方法
// 特别是compareTo方法,它用于制定排序规则
//知识点3:HashSet和TreeSet的常用方法
//1.初始化
HashSet<Integer> hashSet = new HashSet<>();
TreeSet<Integer> treeSet = new TreeSet<>();
//2.增
treeSet.add(3);
treeSet.add(2);
treeSet.add(1);
treeSet.add(1);
treeSet.add(1);
treeSet.add(1);
treeSet.add(0); // [0, 1, 2, 3],重复元素只保留一个
//3.删
//这两个容器都没有通过索引取移除的重载
treeSet.remove(0); // [1, 2, 3],移除元素0
//4.查
if (treeSet.contains(0)) System.out.println("存在0元素"); // 未执行,0元素已被移除
//5.没有改
//6.遍历
// 只有两种遍历 foreach语句和迭代器
for (Integer i : treeSet)
System.out.println(i); // 1 2 3
Iterator<Integer> it = treeSet.iterator();
while (it.hasNext()) System.out.println(it.next()); // 1 2 3
//知识点4:TreeSet独有的方法
//1.first() 返回当前第一个元素
System.out.println(treeSet.first()); // 1
//2.pollFirst() 取出当前第一个元素
System.out.println(treeSet.pollFirst()); // 1,取出并移除第一个元素
System.out.println("*********************");
for (Integer i : treeSet)
System.out.println(i); // 2 3
//3.last() 返回最后一个元素
System.out.println(treeSet.last()); // 3
//4.pollLast() 取出当前最后一个元素
System.out.println(treeSet.pollLast()); // 3,取出并移除最后一个元素
System.out.println("*********************");
for (Integer i : treeSet)
System.out.println(i); // 2
treeSet.add(1);
treeSet.add(3);
treeSet.add(4);
//5.headSet(E obj) 返回一个新Set集合,新集合是传入对象之前的所有对象
System.out.println("*********************");
SortedSet<Integer> newSet = treeSet.headSet(3);//返回3之前所有对象
for (Integer i : newSet)
System.out.println(i); // 1 2
//6.subSet(E b, E e) 返回一个新Set集合,新集合是传入对象b 和 e之间的所有对象,左包含,右不包含
//7.tailSet(E obj) 返回一个新Set集合,新集合是传入对象(包含)之后的所有对象
//等等
//总结
//Set相关集合的特点是
// 1.不会存储重复元素,如果我们有去重需求可以选择他们
// 2.只能遍历获取所有元素,不能单独获取中间的某个元素
// 3.TreeSet会自动排序,可以取出(弹出)首尾
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com