日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

集合比较

發布時間:2024/1/8 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 集合比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

TreeMap的兩種排序方法

TreeSet可以實現對元素按照某種規則進行排序

一 自然排序

1.Student類中實現 Comparable<T>接口
  2.重寫Comparable接口中的Compareto方法

@Override public int compareTo(Student s) { //return -1; //-1表示放在紅黑樹的左邊,即逆序輸出 //return 1; //1表示放在紅黑樹的右邊,即順序輸出 //return o; //表示元素相同,僅存放第一個元素 //主要條件 姓名的長度,如果姓名長度小的就放在左子樹,否則放在右子樹 int num=this.name.length()-s.name.length(); //姓名的長度相同,不代表內容相同,如果按字典順序此 String 對象位于參數字符串之前,則比較結果為一個負整數。 //如果按字典順序此 String 對象位于參數字符串之后,則比較結果為一個正整數。 //如果這兩個字符串相等,則結果為 0 int num1=num==0?this.name.compareTo(s.name):num; //姓名的長度和內容相同,不代表年齡相同,所以還要判斷年齡 int num2=num1==0?this.age-s.age:num1; return num2; }

二 比較器排序

1.單獨創建一個比較類,這里以MyComparator為例,并且要讓其繼承Comparator<T>接口
  2.重寫Comparator接口中的Compare方法

TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { int num = s1.getName().length() - s2.getName().length(); int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num; int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2; return num3; } });


A:自然排序:要在自定義類中實現Comparerable<T>接口 ,并且重寫compareTo方法
  B:比較器排序:在自定義類中實現Comparetor<t>接口,重寫compare方法

TreeMap和HashMap的區別

1、 HashMap通過hashcode對其內容進行快速查找,而TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個有序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。
  2、在Map 中插入、刪除和定位元素,HashMap是最好的選擇。但如果您要按自然順序或自定義順序遍歷鍵,那么TreeMap會更好。使用HashMap要求添加的鍵類明確定義了hashCode()和 equals()的實現。
  兩個map中的元素一樣,但順序不一樣,導致hashCode()不一樣。
  同樣做測試:
  在HashMap中,同樣的值的map,順序不同,equals時,false;
  而在treeMap中,同樣的值的map,順序不同,equals時,true,說明,treeMap在equals()時是整理了順序了的。????

HashTable與HashMap

1、同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的。
  2、HashMap允許存在一個為null的key,多個為null的value 。
  3、hashtable的key和value都不允許為null。

Arraylist和Linkedlist

1.ArrayList是實現了基于動態數組的數據結構,LinkedList基于鏈表的數據結構。

2.對于隨機訪問get和set,ArrayList覺得優于LinkedList,因為LinkedList要移動指針。

3.對于新增和刪除操作add和remove,LinkedList比較占優勢,因為ArrayList要移動數據。 這一點要看實際情況的。若只對單條數據插入或刪除,ArrayList的速度反而優于LinkedList。但若是批量隨機的插入刪除數據,LinkedList的速度大大優于ArrayList. 因為ArrayList每插入一條數據,要移動插入點及之后的所有數據。

Vector和ArrayList

1,vector是線程同步的,所以它也是線程安全的,而arraylist是線程異步的,是不安全的。如果不考慮到線程的安全因素,一般用arraylist效率比較高。

2,如果集合中的元素的數目大于目前集合數組的長度時,vector增長率為目前數組長度的100%,而arraylist增長率為目前數組長度的50%。如果在集合中使用數據量比較大的數據,用vector有一定的優勢。

3,如果查找一個指定位置的數據,vector和arraylist使用的時間是相同的,如果頻繁的訪問數據,這個時候使用vector和arraylist都可以。而如果移動一個指定位置會導致后面的元素都發生移動,這個時候就應該考慮到使用linklist,因為它移動一個指定位置的數據時其它元素不移動。

ArrayList 和Vector是采用數組方式存儲數據,此數組元素數大于實際存儲的數據以便增加和插入元素,都允許直接序號索引元素,但是插入數據要涉及到數組元素移動等內存操作,所以索引數據快,插入數據慢,Vector由于使用了synchronized方法(線程安全)所以性能上比ArrayList要差,LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行向前或向后遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入數度較快。

?

轉載于:https://www.cnblogs.com/RobertLionLin/p/11484113.html

總結

以上是生活随笔為你收集整理的集合比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。