目录
一.Set特点
特点:无序,不重复
思考:如果对List容器中的元素去重?
二.遍历:foreach,迭代器
三.扩容: 初始容量16,负载因子0.75,扩容增量1倍
性能参数:初始容量,负载因子
默认值: 初始容量16,负载因子0.75
示例:new HashSet<>(20, 0.5f);
四.HashSet
五.思考
1. 如何给ArrayList集合去重
@Before public void setup() { list.add(1); list.add(2); list.add(3); list.add(3); list.add(4); list.add(5); list.add(3); list.add(4); //list.add(3); }
//去重复 @Test public void test05() { HashSet ll = new ArrayList (new HashSet(list)); ll.forEach(t->System.out.println(t)); }
2. set有ArrayList中存在的通过下标删除,或foreach循环删除时的问题吗? 为什么
答:set无下标 所有没有
3. set是否存在List删除,传入整数需要区分是基本型还是对象型的问题,【例如:list.remove(2)】,为什么?
答:存在 基本型的整数
六.TreeSet
示例:
自定义比较器
①通过构造函数传入比较器文章来源:https://www.toymoban.com/news/detail-545100.html
②实现排序接口文章来源地址https://www.toymoban.com/news/detail-545100.html
一.Set特点
特点:无序,不重复
思考:如果对List容器中的元素去重?
@Before
public void setup() {
list.add(1);
list.add(2);
list.add(3);
list.add(3);
list.add(4);
list.add(5);
list.add(3);
list.add(4);
//list.add(3);
}//去重复
@Test
public void test05() {
HashSet<Integer> ll = new HashSet<Integer>(list);
ll.forEach(t->System.out.println(t));
}
二.遍历:foreach,迭代器
//遍历方式
@Test
public void test06() {
Set<Integer> set = new HashSet<>();//里氏替换原则
set.add(3);
set.add(2);
set.add(1);
//foreach
for (Integer i : set) {
System.out.println(i);
}
//迭代器
Iterator<Integer> it = set.iterator();
while(it.hasNext()) {
Integer n =it.next();
System.out.println(n);
}
}
三.扩容: 初始容量16,负载因子0.75,扩容增量1倍
性能参数:初始容量,负载因子
默认值: 初始容量16,负载因子0.75
示例:new HashSet<>(20, 0.5f);
四.HashSet
- 它存储唯一元素并允许空值 依据对象的hashcode来确定该元素是否存在
- 由HashMap支持
- 不保持插入顺序
- 非线程安全
五.思考
1. 如何给ArrayList集合去重
@Before
public void setup() {
list.add(1);
list.add(2);
list.add(3);
list.add(3);
list.add(4);
list.add(5);
list.add(3);
list.add(4);
//list.add(3);
}//去重复
@Test
public void test05() {
HashSet<Integer> ll = new ArrayList<Integer> (new HashSet<Integer>(list));
ll.forEach(t->System.out.println(t));
}
2. set有ArrayList中存在的通过下标删除,或foreach循环删除时的问题吗? 为什么
答:set无下标 所有没有
3. set是否存在List删除,传入整数需要区分是基本型还是对象型的问题,【例如:list.remove(2)】,为什么?
答:存在 基本型的整数
六.TreeSet
- 是一个包含有序的且没有重复元素的集合
- 作用是提供有序的Set集合,自然排序或者根据提供的Comparator进行排序
- TreeSet是基于TreeMap实现的
示例:
//TreeMap
@Test
public void test07() {
//回调函数
TreeSet<Integer> ts = new TreeSet<>(
//匿名类
new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
//降序
return o2-o1;
}
}
);//测试数据
ts.add(1);
ts.add(3);
ts.add(4);
ts.add(5);
ts.add(6);
ts.add(8);
ts.add(2);//1. 默认自然排序
for(Integer e: ts) {
System.out.println(e);
}
}
自定义比较器
①通过构造函数传入比较器
TreeSet<Integer> tset = new TreeSet<Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return o2 - o1;
}
});
②实现排序接口
public class Student implements Comparable<Student>{
private Integer sid;
private String name;
private int age;
//构造函数,getter,setter,hashCode,equals等方法省略
@Override
public int compareTo(Student o) {
// TODO Auto-generated method stub
return o.getAge() - this.getAge();
}}
到了这里,关于J2EE&集合框架&Set的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!