Set集合
-
目录
- Set集合的特性
- Set的实现类
- Set集合的常用操作
- Set集合t使用的一个例子
-
Set集合的特性
- set集合中的内容是无序的(存储顺序和取出来的顺序不一定一致),而且不可重复;
- 检索元素和修改元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变;
- set数组中不存在get()方法
Set图示
-
Set的实现类
- 实现类1——HashSet
-
底层数据结构是Hash表;
-
HashSet是如何保证元素唯一性的原理:
是通过元素的两个方法,hashCode和equals来完成的
如果元素的hashCode值相同,才会判断equals是否为true
如果hashCode的值不同,不会调用equals方法;
-
Set<String> set = new HashSet<String>();
- 实现类2——TreeSet
-
底层数据结构是二叉树;
-
保证元素唯一性的依据:通过ComparaTo,返回0;
- 通过TreeSet可以实现Set集合的排序;
Set<Integer> set2 = new TreeSet<Integer>();
-
Set集合的常用操作(增删改查)
- 添加元素,单次添加一个元素——add(value);
1 set.add("张三"); 2 set.add("李四"); 3 set.add("李四");//测试重复,编译运行不会报错,但是集合里只有一个”李四“
- 添加元素,单词添加一个集合——addAll(new set);
set2.addAll(set);//set2获得set的所有元素
- 删除元素,单次删除指定元素——remove(value);
set.remove("李四");
- 修改元素(没有自带方法,其实修改Set里的内容,可以理解为把需要修改的元素删除后添加进去新的内容,因为都是无序的)
1 //改,因为是无序的,也没有实际意义上 的改,可以直接把要修改的元素删除,后添加新元素,如改张三为张哥: 2 set.remove("张三"); 3 set.add("张哥");
- 获得元素,也就是查出一个元素,Set没有像List那样具有直接的get方法,可以钩爪其他方法来获得,获得全部元素的话直接遍历Set集合;
1 //查,set无序,不能按序号查,所以只有遍历查 2 for (String s : set) { 3 System.out.print(s); 4 }
以上所有也可以通过遍历来操作。
-
Set集合的一个例子
1 import java.util.HashSet; 2 import java.util.Set; 3 4 public class TestSet { 5 6 public static void main(String[] args) { 7 8 Set<String> set = new HashSet<String>(); 9 Set<String> set2 = new HashSet<String>(); 10 11 //增 12 set.add("张三"); 13 set.add("李四"); 14 set.add("李四");//测试重复,编译运行不会报错,但是集合里只有一个”李四“ 15 set2.addAll(set);//set2获得set的所有元素 16 17 18 //改,因为是无序的,也没有实际意义上 的改,可以直接把要修改的元素删除,后添加新元素,如改张三为张哥: 19 set.remove("张三"); 20 set.add("张哥"); 21 22 //删 23 set.remove("李四"); 24 25 //查,set无序,不能按序号查,所以只有遍历查 26 for (String s : set) { 27 System.out.print(s); 28 } 29 30 } 31 32 }