首頁 类库下载 java类库 JAVA Collections工具類

JAVA Collections工具類

Oct 20, 2016 am 11:27 AM
collections java 工具

主要分析內容:

一、Collections工具類別兩種sort()方法

二、範例

 

一、Collections工具類別兩種sort()方法

格式一:一、Collections工具類別兩種sort() List list)

說明:此方法中的泛型

都是Comparable介面的子類,即只有是Comparable介面子類別類型的數據,才能進行比較排序。如果其他類型的資料要進行比較排序,必須繼承Comparable介面並

覆寫equals()和compareTo()方法。其中如String類別、Integer類別都是Comparable介面子類,可以進行排序,而基本型別不能進行sort排序。比較項目在類別內指定

 

格式二:public static

void sort(List list, Comparator c) super T>

說明:在該方法中指定比較方式必須進行比較寫compareTo()方法指定比較項目。比較項目在類別外指定,比較靈活

super T>  super T>

二、範例

範例中取得字串和數字的公用方法:

/**
     * 生成随机 不重复的字符串 : number 生成字符串个数
     */
    public static List<String> generateString(int number) {
        List<String> listString = new ArrayList<>(); // 用于存放返回值
        List<Integer> length = null; // 字符串长度
        StringBuffer sb = new StringBuffer(); // 中间变量
        int control = 0; // 控制个数
        String[] chars = new String[] { "a", "b", "c", "d", "e", "f", "g", "h",
                "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
                "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
                "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H",
                "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
                "U", "V", "W", "X", "Y", "Z" };
        while (true) {
            // 控制结束
            if ( control==number ) {
                break;
            }
            // 生成随机数,生成36位的2aaab761-4341-4968-aceb-3861ee3824b2 UUID类型数据
            String uuid = UUID.randomUUID().toString().replace("-", "");
            sb.setLength(0);
            // 获得随机字符串长度,长度不为0
            do {
                length = getDiffNo(1, 11);
            } while ( length.get(0)==0 );
            // 拼凑字符串
            for (int i=0; i<length.get(0); i++) {
                String str = uuid.substring(i*3, (i*3+3));
                //将str字符串转换为16进制,获得其值
                int x = Integer.parseInt(str, 16);
                //取余:x % 0x3E--0x3E = 3*16 + 14 = 62, 其中chars有62个字符
                sb.append(chars[x % 0x3E]);
            }
            listString.add(sb.toString());
            control++;
        }
        return listString;
    }

    /**
     * 生成随机不重复的数字 :n生成个数  max生成范围
     */
    public static List<Integer> getDiffNo(int n, int max) {
        // 生成 [0-n] 个不重复的随机数
        // list 用来保存这些随机数
        List<Integer> list = new ArrayList<>();
        Random random = new Random();
        Integer k;
        for (int i=0; i<n; i++) {
            do {
                k = random.nextInt(max);
            } while (list.contains(k));
            list.add(k);
        }
        return list;
    }
登入後複製

1、對Integer泛型的List進行排序

/**
     * 1.通过Collections.sort()方法,对Integer泛型的List进行排序;
     * 创建一个Integer泛型的List,插入十个100以内的不重复随机整数, 调用Collections.sort()方法对其进行排序
     * 2.排序规则:先数字后字母,数字0-9,字母A-Z a-z的顺序
     */
    public void listIntegerSort() {
        // 插入十个100以内的不重复随机整数
        List<Integer> integerList = getDiffNo(10, 100);
        System.out.println("-------------排序前--------------");
        for (Integer integer : integerList) {
            System.out.println("元素:" + integer);
        }
        Collections.sort(integerList);
        System.out.println("----------------排序后-------------------");
        for (Integer integer : integerList) {
            System.out.println("元素:" + integer);
        }
    }
登入後複製

2、對泛白型的List進行排序

/**
     * 1.对String泛型的List进行排序; 创建String泛型的List,添加乱序的String元素,
     * 调用sort方法,再次输出排序后的顺序
     */
    public void listStringSort() {
        List<String> stringList = new ArrayList<String>();
        stringList.add("eipJlcx");
        stringList.add("WvQRufC");
        stringList.add("J");
        stringList.add("HdaU2G");
        stringList.add("M0WswHD3");
        System.out.println("------------排序前-------------");
        for (String string : stringList) {
            System.out.println("元素:" + string);
        }
        Collections.sort(stringList);
        System.out.println("--------------排序后---------------");
        for (String string : stringList) {
            System.out.println("元素:" + string);
        }
    }
登入後複製
/**
     * 对String泛型的List进行排序,要求随机生成10个的不重复字符串,字符串的长度在10以内
     */
    public void listStringRandomSort() {
        // 生成随机字符串
        List<String> listString = generateString(10);
        System.out.println("--------------排序前---------------");
        for (String integer : listString) {
            System.out.println("元素:" + integer);
        }
        // 排序
        Collections.sort(listString);
        System.out.println("----------------排序后------------------");
        for (String integer : listString) {
            System.out.println("元素:" + integer);
        }
    }
登入後複製

3、對其他類型泛型的List進行排序

Course類別實作

/**
 * 课程类
 * @author Administrator
 *
 */
public class Course {
    public String id;
    public String name;
    public Course(String id, String name) {
        this.id = id ;
        this.name = name;
    }
    public Course() {
    }
    
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (!(obj instanceof Course))
            return false;
        Course other = (Course) obj;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
}
登入後複製

Student類別實作Comparable接口,類別內設定比較項

import java.util.HashSet;
import java.util.Set;

/**
 * 学生类
 * @author Administrator
 *
 */
public class Student implements Comparable<Student> {
    public String id;
    public String name;
    public Set<Course> courses;
    
    public Student(String id, String name) {
        this.id = id;
        this.name = name;
        this.courses = new HashSet<Course>();
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (!(obj instanceof Student))
            return false;
        Student other = (Student) obj;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

    @Override
    public int compareTo(Student o) { // 设置ID为比较项
        // TODO Auto-generated method stub
        return this.id.compareTo(o.id);
    }
}
登入後複製

Student類別實作Comparable介面,類別內設定比較項

import java.util.Comparator;
public class StudentComparator implements Comparator<Student> {

    @Override
    public int compare(Student o1, Student o2) {
        // TODO Auto-generated method stub
        return o1.name.compareTo(o2.name);
    }
}
登入後複製

Comparator,實作類外設定比較項

/**
     * 对其他类型泛型的List进行排序,以Student为例。
     */
    public void listComparatorSort() {
        List<Student> studentList = new ArrayList<Student>();
        List<Integer> list = getDiffNo(4, 1000);

        studentList.add(new Student(list.get(0) + "", "Mike"));
        studentList.add(new Student(list.get(1) + "", "Angela"));
        studentList.add(new Student(list.get(2) + "", "Lucy"));
        studentList.add(new Student(1000 + "", "Beyonce"));
        System.out.println("--------------排序前---------------");
        for (Student student : studentList) {
            System.out.println("学生:" + student.id + ":" + student.name);
        }
        // 实现Comparator<T>接口,设置ID比较方式
        Collections.sort(studentList);
        System.out.println("----------------按照ID排序后------------------");
        for (Student student : studentList) {
            System.out.println("学生:" + student.id + ":" + student.name);
        }

        // 实现Comparator<T>接口,设置特定比较方式,以name比较排序
        Collections.sort(studentList, new StudentComparator());
        System.out.println("----------------按照姓名排序后-----------------");
        for (Student student : studentList) {
            System.out.println("学生:" + student.id + ":" + student.name);
        }
    }
登入後複製

比較Student類別

rrreee

參考學習連接:

Comparable介面的實作與使用:http://www.cnblogs.com/gnuhpc/archive/2012/12/17/2822251.htmllect.對List排序的兩種方法:http://blog.csdn.net/wxx614817/article/details/50628197

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

比特幣值多少美金 比特幣值多少美金 Apr 28, 2025 pm 07:42 PM

比特幣的價格在20,000到30,000美元之間。 1. 比特幣自2009年以來價格波動劇烈,2017年達到近20,000美元,2021年達到近60,000美元。 2. 價格受市場需求、供應量、宏觀經濟環境等因素影響。 3. 通過交易所、移動應用和網站可獲取實時價格。 4. 比特幣價格波動性大,受市場情緒和外部因素驅動。 5. 與傳統金融市場有一定關係,受全球股市、美元強弱等影響。 6. 長期趨勢看漲,但需謹慎評估風險。

比特幣今日價格行情 比特幣今日價格行情 Apr 28, 2025 pm 07:39 PM

比特幣今日價格波動受宏觀經濟、政策、市場情緒等多因素影響,投資者需關注技術和基本面分析以做出明智決策。

幣圈十大交易平台排名最新 十大數字貨幣交易所排行榜2025年 幣圈十大交易平台排名最新 十大數字貨幣交易所排行榜2025年 Apr 28, 2025 pm 01:39 PM

2025年幣圈十大交易平台排名依次為:1. Binance,2. OKX,3. gate.io,4. Huobi Global,5. Coinbase,6. Kraken,7. Bitfinex,8. KuCoin,9. Bybit,10. Bitstamp,這些平台因其安全性、交易量、用戶體驗和創新性在市場中脫穎而出。

十大虛擬幣交易app 十大虛擬幣交易平台最新排行榜2025年 十大虛擬幣交易app 十大虛擬幣交易平台最新排行榜2025年 Apr 28, 2025 pm 02:09 PM

十大虛擬幣交易app分別是:1. OKX,2. Binance,3. gate.io,4. Coinbase,5. Kraken,6. Huobi,7. KuCoin,8. Bitfinex,9. Bitstamp,10. Poloniex,各平台在交易產品、用戶體驗、安全性等方面表現突出,滿足不同投資者的需求。

幣圈十大交易平台排名 十大數字貨幣交易所最新排行榜 幣圈十大交易平台排名 十大數字貨幣交易所最新排行榜 Apr 28, 2025 pm 01:09 PM

幣圈十大交易平台排名:1. Binance,2. OKX,3. gate.io,4. Huobi Global,5. Coinbase,6. Kraken,7. Bitfinex,8. KuCoin,9. Bybit,10. Bitstamp。這些平台因其高交易量、多樣化交易對、強大的安全措施、創新產品、用戶友好的界面、豐富的交易選項和全球化服務等優勢在市場中脫穎而出。

現貨王者轉型記:Gate.io MeMebox 2.0如何佈局下一代鏈上生態? 現貨王者轉型記:Gate.io MeMebox 2.0如何佈局下一代鏈上生態? Apr 28, 2025 pm 03:36 PM

Gate.io通過MeMebox 2.0實現了從現貨交易向鏈上生態的轉型。 1) 構建跨鏈基礎設施,支持12條主鏈互通;2) 打造DeFi應用生態,提供一站式服務;3) 實施激勵機制,重構價值分配。

靠譜的數字貨幣交易平台推薦 全球十大數字貨幣交易所排行榜2025 靠譜的數字貨幣交易平台推薦 全球十大數字貨幣交易所排行榜2025 Apr 28, 2025 pm 04:30 PM

靠谱的数字货币交易平台推荐:1. OKX,2. Binance,3. Coinbase,4. Kraken,5. Huobi,6. KuCoin,7. Bitfinex,8. Gemini,9. Bitstamp,10. Poloniex,这些平台均以其安全性、用户体验和多样化的功能著称,适合不同层次的用户进行数字货币交易

芝麻開門官網入口 芝麻開門官方最新入口2025 芝麻開門官網入口 芝麻開門官方最新入口2025 Apr 28, 2025 pm 07:51 PM

芝麻開門是重點加密貨幣交易的平台,用戶可以通過官方網站或社交媒體獲取入口,確保訪問時驗證SSL證書和網站內容的真實性。

See all articles