java、Set
来源:互联网 发布:win7加密文件夹,软件 编辑:程序博客网 时间:2024/06/02 06:29
HashSet
1、不能保证元素的排列顺序,顺序有可能发生变化
2、 HashSet 是哈希表实现的,HashSet中的数据是无 序的,可以放入null,但只能放入一个null(无重复)
3、当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值, 然后根据 hashCode值来决定该对象在HashSet中存储位置。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了, 就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。
HashSet<Student> stu = new HashSet<Student>(); HashSet<Student> stu2 = new HashSet<Student>(); Student student1 = new Student("小斌",23); Student student2 = new Student("小赵",21); Student student3 = new Student("Tds",20); Student student4 = new Student("黑有有",23); Student student5 = new Student("helloword",20); Student student6 = new Student("Jan",19); stu.add(student1); stu.add(student2); stu.add(student3); stu.add(student4); stu.clear(); stu2.add(student5); stu2.add(student6); stu.addAll(stu2); stu.removeAll(stu2);//把一个集合放到另外一个集合中 stu.containsAll(stu2); Iterator<Student> integer = stu.iterator(); while(integer.hasNext()){ Student student = integer.next(); System.out.println("学生姓名:"+student.getUsername()+" 年龄:"+student.getAge()); }
TreeSet
TreeSet追加元素不允许是空的
//TreeSet默认是升序TreeSet<Integer> ts = new TreeSet<Integer>(); ts.add(10); ts.add(8); ts.add(5); ts.add(1000); ts.add(20); ts.first();//排序好的第一个元素 ts.last();//排序好的最后一个元素 ts.lower(10);//排序好了之后,比10还小的,在10旁边的一个元素 ts.higher(10));//排序好了之后,比10还大的,在10旁边的一个元素 ts.subSet(10, 100);//返回大于10 小于100 排好序的一堆元素 ts.headSet(10);//小于10的所有排序好的元素 ts.tailSet(20);//大于等于20的所有排序好的元素 for (Integer integer : ts) { System.out.print(integer+" "); }//TreeSet降序import java.util.Comparator;public class IntegerComparator implements Comparator<Integer>{ private boolean flag; public IntegerComparator(boolean flag) { this.flag = flag; } @Override public int compare(Integer o1, Integer o2) { if(o1>o2){ return flag?1:-1; }else if (o1<o2) { return flag?-1:1; }else { return 0; } }}import java.util.TreeSet;public class TreeSetDemo02 { public static void main(String[] args) { TreeSet<Integer> ts = new TreeSet<Integer>(new IntegerComparator(false)); ts.add(100); ts.add(20); ts.add(30); ts.add(50); ts.add(-30); ts.add(-600); ts.add(-100); for (Integer integer : ts) { System.out.print(integer+" "); } }}
LinkedHashSet
1、LinkedHashSet继承了HashSet集合,同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。
2、这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
3、LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。
import java.util.LinkedHashSet;public class LinkedHashSetDemo { public static void main(String[] args) { LinkedHashSet<Integer> hashSet = new LinkedHashSet<Integer>(); hashSet.add(1); hashSet.add(100); hashSet.add(50); hashSet.add(20); hashSet.add(30); hashSet.add(30); for (Integer integer : hashSet) { System.out.print(integer+" "); } }}
例子
public class Student{ private String username; private int age; public Student() { // TODO Auto-generated constructor stub } public Student(String username,int age) { this.username = username; this.age = age; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}import java.util.Comparator;import java.util.TreeSet;public class StudentCompare { public static void main(String[] args) { //用匿名内部类实现 TreeSet<Student> students = new TreeSet<Student>(new Comparator<Student>(){ @Override public int compare(Student o1, Student o2) { if(o1.getAge()>o2.getAge()){ return -1; }else if (o1.getAge()<o2.getAge()) { return 1; }else { return 0; } } }); Student student = new Student("looker",25); Student student2 = new Student("三哥",20); Student student3 = new Student("易通",24); Student student4 = new Student("大师兄",22); Student student5 = new Student("小赵",20); students.add(student); students.add(student2); students.add(student3); students.add(student4); students.add(student5); for (Student stu : students) { System.out.print(stu.getUsername()+" 年龄:"+stu.getAge()); } }}
总结
1)HashSet 元素无序的,并且不能重复 线程不安全 hashSet是哈希表实现的 ,可以放入null,但是只能放入1个null. hashCode()方法来确定你要存放位置。如果这个位置上没有元素,他就可以直接存放在这个位置上。如果有元素了,就调用它的equals()方法与新元素进行比较。相同的话就不存放了,不想通就散列到其他位置。2)LinkedHashSet 同样根据元素的hashCode值来确定的元素位置。链表维护关系3)TreeSet sortedSet接口的唯一实现类。保证元素处于排序状态 TreeSet是二叉树实现的。不可以放入null值。 应该使用Comparator接口,实现 int compare(T o1,T o2)方法 Collections.synchronizedList(new HashSet(Integer)); 当我们多个线程访问集合并且超过一个线程修改了这个集合对象,就必须手动方式保证set集合同步
阅读全文
0 0
- java set
- java--Set
- Java Set
- [java] set
- Java Set
- java--set
- java---Set
- java---Set
- Java Set
- java、Set
- java.util.Set翻译
- java set system time
- java.util.Set翻译
- java.util.Set
- JAVA---List,Map,Set
- java mail: set
- java集合Set操作
- Java Set Delete Remove
- posgre的行列转换
- python 多进程 multiprocessing
- RMQ ST表学习笔记
- rails "column "traffic_total" cannot be cast automatically "报错解决方案
- Linux服务器编程——Linux系统编程(2)之I/O函数
- java、Set
- 微信朋友圈:应对春节千亿访问量背后的故事
- Java——关于static关键字的那些事总结
- spring学习笔记(一) --- 下载spring jar包
- Stack源码探讨(基于JDK1.8)
- Restrictions查询方法
- 响应式布局总结
- Hessian——轻量级远程调用方案
- C#MaskedTextBox掩码元素说明