建体彩网|中彩网双色球连号|
?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

皇馬國際老品牌網站:JAVA提高教程(4)認識Set集合之TreeSet

?

TreeSet 是用來進行聚攏排序的,請留意他和LinkedHashSet的差別。

TreeSet是按照必然的規則,將加入到聚攏里面的數據進行排序,而LinkedHashSet是嚴格按照你放入聚攏的順序進行應用。

先看源代碼

package collection.lession4;

import java.util.Arrays;

import java.util.Comparator;

import java.util.Set;

import java.util.TreeSet;

/**

* 老紫竹JAVA前進教程(4)-熟識Set聚攏之TreeSet。

* 此實現的特征是里面的數據會自然排序或者用指定的排序類排序。

*

* @author 老紫竹

*

*/

public class Lession4 {

public static void main(String[] args) {

// 測試自然排序

testNature();

// 測試指定排序要領

testComparator();

// 測試特殊的混雜工具排序

testMix();

}

public static void testNature() {

// 測試一下數字

TreeSet set = new TreeSet();

// 反向存入整數數據

for (int i = 10; i >= 1; i--) {

set.add(i);

}

// 輸出看看

// 可以看到數據為自然的數字排序

showSet(set); // [1, 2, 3, 4,皇馬國際老品牌網站 5, 6, 7, 8, 9, 10]

// 測試一下字符串

TreeSet set2 = new TreeSet();

// 同樣反向放入

for (int i = 10; i >= 1; i--) {

set2.add(i + "");

}

// 看輸出結果

// 10 的自然排序沒有皇馬國際老品牌網站2高,由于字符'1'小于'2'

showSet(set2); // [1, 10, 2, 3, 4, 5, 6, 7, 8, 9]

// TreeSet里面的數據由于要排隊

// 以是假如是混雜類型數據的數據,假如不能字段轉換

// 將呈現非常 java.lang.ClassCastException:

}

public static void testComparator() {

// 同樣測試數字,我們要反向排序

TreeSet set = new TreeSet(new MyIntegerComparator());

// 反向存入整數數據

for (int i = 10; i >= 1; i--) {

set.add(i);

}

// 輸出看看

// 可以看到數據為我們期望的反向排序了

showSet(set); // [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

// 我們指定更稀罕的排序,奇數在前面,偶數在后面

// 我們應用匿名內部類

TreeSet set2 = new TreeSet(new Comparator() {

@Override

public int compare(Integer o1, Integer o2) {

if皇馬國際老品牌網站 (o1 % 2 != 0) {

if (o2 % 2 != 0) {

return o2.compareTo(o1);

}皇馬國際老品牌網站

return -1;

}

if (o2 % 2 != 0) {

return 1;

}

return o2.compareTo(o1);

}

});

// 反向存入整數數據

for (int i = 10; i >= 1; i--) {

set2.add(i);

}

// 輸出看看

// 可以看到數據,技巧的在前面,且從大年夜到小排序

// 偶數在后面,也是從大年夜到小排序

showSet(set2); // [9, 7, 5, 3, 1, 10, 8, 6, 4, 2]

}

/**

* 混雜工具,你要為每個工具類型進行計較節制,避免呈現轉換非常.

*/

public static void testMix() {

// 我們測試混雜類型的工具,比如字符串和整數

// 假如我們不指定自己的對照器,而應用默認的自然對照器

// 將發生非常

TreeSet set = new TreeSet(new Comparator() {

@Override

public int compare(Object o1, Object o2) {

// 我們用字符串對照好了

return o1.toString().compareTo(o2.toString());

}

});

for (int i = 10; i >= 1; i--) {

set.add(i); // 存入整數

set.add(i + ""); // 存入字符串

}

// 輸出看看

// 里面的內容確鑿按照字符串進行排序了。

// 數字被轉化為字符串再介入對照。

showSet(set); // [1, 10, 2, 3, 4, 5, 6, 7, 8, 9]

}

/**

* 顯示Set里面的數據。

*

* @param set

*/

private static void showSet(Set set) {

System.out.println(Arrays.toString(set.toArray()));

}

}

// 留意,我指定了強制類型的對照器

class MyIntegerComparator implements Comparator {

@Override

public int compare(Integer o1, Integer o2) {

return o2.compareTo(o1);// 應用反向的對照

}

}

測試:

1 默認排序要求里面的數據類型必須能相互自由轉換(實際上就應該是一個類型才行),我們測試如下代碼看看運行差錯

// 支持混雜類型

TreeSet set = new TreeSet();

// 放入混雜數據

for (int i = 10; i >= 1; i--皇馬國際老品牌網站) {

set.add(i); // 存入整數

set.add(i + ""); // 存入字符串

}

2 測試讓所有的排序都反向,比如曩昔是從小到大年夜,變成從大年夜到小。 奇數靠前變成偶數考前。

總結:

當你必要讓聚攏進行有必然排序規則的應用時,記得用這個。 不過我小我更愛好用List,需要時用sort措施進行排序。

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

建体彩网
35选7选号机 上海快三今天开奖结果 北京11选5中奖结果 新快3吉林 香港六个彩特码资料 香港麻将三辣 甘肃十一选五 腾讯分分彩玩法和窍门 甘肃快3预测分析 陕西十一选五