JAVA复习5(TreeSet)
Set 接口
?
特點: 最大的特點 就是集合中的元素 不可重復? 其也是Collection接口的子接口 , Set本身也是一個接口,同樣不能直接使用,需要實例化該接口的實現(xiàn)類 Set接口下面的實現(xiàn)類:
常用
1 TreeSet?? 有序 ,不可重復
| ? public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable? |
?
常用方法? 來自Collection
?
?
范例: 觀察TreeSet子類的使用
| public static void main(String[] args) { ????????? Set<String> all=new TreeSet<>(); ????????? ????????? all.add("B"); ????????? ????????? all.add("C"); ????????? ????????? all.add("A"); ????????? ????????? all.add("C");? //重復元素 ????????? ????????? for(String str:all) { ?????????????? ?????????????? System.out.println(str); ????????? } ???? } |
?
通過觀察以上代碼發(fā)現(xiàn),TreeSet 存放的數(shù)據(jù)有以下兩個特點:
?
1 有序?? 為什么有序?
?
TreeSet的排序是通過compreable 接口中的compareTo方法完成的 該方法返回 3個取值
?
分別為: 1 升序?? - 1 降序?? 0 重復元素的判斷
范例: 使用自定義類完成TreeSet
?
| public static void main(String[] args) { ????????? ????????? ????????? Set<Person> all=new TreeSet<>(); ????????? ????????? all.add(new Person("張三",32)); ????????? ????????? all.add(new Person("李四",20)); ????????? ????????? all.add(new Person("張三",32)); ????????? ????????? all.add(new Person("隔壁老王",89));? //重復元素 ????????? ????????? for(Person per:all) { ?????????????? ?????????????? System.out.println(per); ????????? } ???? } |
?
出錯了以下的錯誤:
| Exception in thread "main" java.lang.ClassCastException: org.list.Person cannot be cast to java.lang.Comparable ???? at java.util.TreeMap.compare(Unknown Source) ???? at java.util.TreeMap.put(Unknown Source) ???? at java.util.TreeSet.add(Unknown Source) ???? at org.set.TreeSetDemo.main(TreeSetDemo.java:15) |
?
說明在TreeSet中進行保存的時候,約定存儲的類型必須實現(xiàn)一個接口,而這個接口就是comparable接口,如果沒有這個接口則不能實現(xiàn)排序功能
?
范例:實現(xiàn)compareTo方法
| @Override ???? public int compareTo(Person o) { ????????? // TODO Auto-generated method stub ????????? if(this.age>o.age) { ?????????????? return 1; ????????? }else if(this.age<o.age) { ?????????????? return -1; ????????? } ????????? return 0; ???? } |
?
?
?
?
2 不可重復
?重復元素的區(qū)分 在TreeSet中是依靠compareTo方法是否返回0來判斷的
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的JAVA复习5(TreeSet)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不减速故意撞?“宝马猛撞奥迪致3死”幸存
- 下一篇: 微软发布新版 Win11 免费虚拟机(2