java学习日记_86:集合框架之 LinkedHashSet和 TreeSet
2016-11-23 13:27
609 查看
LinkedHashSet:底层数据结构由哈希表和链表组成。
哈希表保证元素的唯一性。
链表保证元素有素。(存储和取出是一致)
TreeSet:能够对元素按照某种规则进行排序。
排序有两种方式
A:自然排序
B:比较器排序
TreeSet集合的特点:排序和唯一
通过观察TreeSet的add()方法,我们知道最终要看TreeMap的put()方法。
TreeSet存储自定义对象并保证排序和唯一。
A:你没有告诉我们怎么排序
自然排序,按照年龄从小到大排序
B:元素什么情况算唯一你也没告诉我
成员变量值都相同即为同一个元素
哈希表保证元素的唯一性。
链表保证元素有素。(存储和取出是一致)
import java.util.LinkedHashSet; public class LinkedHashSetDemo { public static void main(String[] args) { // 创建集合对象 LinkedHashSet<String> hs = new LinkedHashSet<String>(); // 创建并添加元素 hs.add("hello"); hs.add("world"); hs.add("java"); hs.add("world"); hs.add("java"); // 遍历 for (String s : hs) { System.out.println(s); } } }
TreeSet:能够对元素按照某种规则进行排序。
排序有两种方式
A:自然排序
B:比较器排序
TreeSet集合的特点:排序和唯一
通过观察TreeSet的add()方法,我们知道最终要看TreeMap的put()方法。
import java.util.TreeSet; public class TreeSetDemo { public static void main(String[] args) { // 创建集合对象 // 自然顺序进行排序 TreeSet<Integer> ts = new TreeSet<Integer>(); // 创建元素并添加 // 20,18,23,22,17,24,19,18,24 ts.add(20); ts.add(18); ts.add(23); ts.add(22); ts.add(17); ts.add(24); ts.add(19); ts.add(18); ts.add(24); // 遍历 for (Integer i : ts) { System.out.println(i); } } }
TreeSet存储自定义对象并保证排序和唯一。
A:你没有告诉我们怎么排序
自然排序,按照年龄从小到大排序
B:元素什么情况算唯一你也没告诉我
成员变量值都相同即为同一个元素
import java.util.TreeSet; public class TreeSetDemo2 { public static void main(String[] args) { // 创建集合对象 TreeSet<Student> ts = new TreeSet<Student>(); // 创建元素 Student s1 = new Student("linqingxia", 27); Student s2 = new Student("zhangguorong", 29); Student s3 = new Student("wanglihong", 23); Student s4 = new Student("linqingxia", 27); Student s5 = new Student("liushishi", 22); Student s6 = new Student("wuqilong", 40); Student s7 = new Student("fengqingy", 22); // 添加元素 ts.add(s1); ts.add(s2); ts.add(s3); ts.add(s4); ts.add(s5); ts.add(s6); ts.add(s7); // 遍历 for (Student s : ts) { System.out.println(s.getName() + "---" + s.getAge()); } } } /* * 如果一个类的元素要想能够进行自然排序,就必须实现自然排序接口 */ public class Student implements Comparable<Student> { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(Student s) { // return 0; // return 1; // return -1; // 这里返回什么,其实应该根据我的排序规则来做 // 按照年龄排序,主要条件 int num = this.age - s.age; // 次要条件 // 年龄相同的时候,还得去看姓名是否也相同 // 如果年龄和姓名都相同,才是同一个元素 int num2 = num == 0 ? this.name.compareTo(s.name) : num; return num2; } }
相关文章推荐
- Java集合框架学习(四) LinkedHashSet详解
- JavaSE入门学习36:Java集合框架之Set接口及其实现类HashSet和TreeSet
- java学习日记_86:集合框架之Map
- java学习日记_81:集合框架之 LinkedList类与Vector类
- Java基础---集合框架---迭代器、ListIterator、Vector中枚举、LinkedList、ArrayList、HashSet、TreeSet、二叉树、Comparator
- JAVA基础学习之String、StringBuffer、StringBuilder、基本数据类型的使用、整形进制转换、集合Collection、Vector、ArrayList、LinkedList、HashSet、TreeSet等(3)
- Java基础---集合框架---迭代器、ListIterator、Vector中枚举、LinkedList、ArrayList、HashSet、TreeSet、二叉树、Comparator
- JAVA学习【7】集合框架与Arraylist、Linkedlist、HashSet的基本用法
- 【Java_集合框架Set】HashSet、LinkedHashSet、TreeSet使用区别
- 学习笔记_毕向东 Java_集合框架_LinkedList 2014.7.22
- Java基础之集合框架(一)--Collection、List、LinkedList、HashSet
- 深入Java集合学习系列:LinkedHashSet的实现原理
- 深入Java集合学习系列:LinkedHashSet的实现原理
- 黑马程序员--Java学习日记8_集合框架
- 复习java基础第三天(集合:Collection、Set、HashSet、LinkedHashSet、TreeSet)
- java学习日记(7)——集合框架的学习
- 深入Java集合学习系列:LinkedHashSet的实现原理
- 黑马程序员_学习笔记:10) 集合框架2:Set(HashSet、TreeSet)、Map(Hashtable、HashMap、TreeMap)、Collections、Arrays
- Java集合源码学习(11)_Set接口的实现LinkedHashSet
- 深入Java集合学习系列:LinkedHashSet的实现原理