国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java 鍵值對(duì) 按值排序

Moxmi / 1944人閱讀

摘要:在最近寫程序題的時(shí)候,需要存儲(chǔ)一個(gè)為為的后來需要根據(jù)的長度對(duì)從小到大進(jìn)行排序。用代替,然后中的元素為配對(duì)類,變相實(shí)現(xiàn)了一個(gè)鍵對(duì)應(yīng)一個(gè)值的集合,并且能夠排序。

在最近寫程序題的時(shí)候,需要存儲(chǔ)一個(gè)key為char,value為string的map,后來需要根據(jù)string的長度對(duì)map從小到大進(jìn)行排序。

目標(biāo):

1.用Pair配對(duì)

一開始用的是HashMap,但是后面發(fā)現(xiàn)HashMap是無序的,于是想把HashMap的一個(gè)鍵值對(duì)取出來,存到集合里,再對(duì)集合進(jìn)行自定義排序,上網(wǎng)搜到有一個(gè)配對(duì)的類Pair,他有一個(gè)key和一個(gè)value屬性,想到用來代替HashMap的一個(gè)鍵值對(duì)。

用ArrayList代替HashMap,然后ArrayList中的元素為配對(duì)類,變相實(shí)現(xiàn)了一個(gè)鍵對(duì)應(yīng)一個(gè)值的集合,并且能夠排序。

首先存儲(chǔ)配對(duì)到集合中:
       ArrayList> pairs = new ArrayList<>();
        Pair pair;
        pair = new Pair<>(1, "abc");
        pairs.add(pair);
        pair = new Pair<>(2, "abcd");
        pairs.add(pair);
        pair = new Pair<>(3, "ab");
        pairs.add(pair);
        pair = new Pair<>(4, "abcde");
        pairs.add(pair);
對(duì)集合進(jìn)行排序

調(diào)用ArrayList對(duì)象的sort方法進(jìn)行排序,他需要Comparator接口,有三種實(shí)現(xiàn)方法:

內(nèi)部類進(jìn)行排序
public class Main {

    public static void main(String[] args) {
        ArrayList> pairs = new ArrayList<>();
        Pair pair;
        pair = new Pair<>(1, "abc");
        pairs.add(pair);
        pair = new Pair<>(2, "abcd");
        pairs.add(pair);
        pair = new Pair<>(3, "ab");
        pairs.add(pair);
        pair = new Pair<>(4, "abcde");
        pairs.add(pair);
        pairs.sort(new Main().new StringCmp());//建立Main內(nèi)部類的一個(gè)實(shí)例對(duì)象
    }
    //實(shí)現(xiàn)比較接口的內(nèi)部類
    public class StringCmp implements Comparator{
        @Override
        public int compare(Object o1, Object o2) {
            Pair s1 = (Pair)o1;
            Pair s2 = (Pair)o2;
            return new Integer(s1.getValue().length()).compareTo(s2.getValue().length());
        }
    }
}
匿名內(nèi)部類進(jìn)行排序

如果不需要復(fù)用這個(gè)排序的方法,多帶帶為他寫一個(gè)類太過浪費(fèi)又不安全,可以使用匿名的內(nèi)部類

public class Main {

    public static void main(String[] args) {
        ArrayList> pairs = new ArrayList<>();
        Pair pair;
        pair = new Pair<>(1, "abc");
        pairs.add(pair);
        pair = new Pair<>(2, "abcd");
        pairs.add(pair);
        pair = new Pair<>(3, "ab");
        pairs.add(pair);
        pair = new Pair<>(4, "abcde");
        pairs.add(pair);
        //使用匿名內(nèi)部類
        pairs.sort(new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Pair s1 = (Pair)o1;
                Pair s2 = (Pair)o2;
                return new Integer(s1.getValue().length()).compareTo(s2.getValue().length());
            }
        });

    }
}

判斷的代碼雷同,只是不用在去新建一個(gè)類。

lambda表達(dá)式

lambda表達(dá)式就是匿名內(nèi)部類的簡寫版:

import javafx.util.Pair;

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {
        ArrayList> pairs = new ArrayList<>();
        Pair pair;
        pair = new Pair<>(1, "abc");
        pairs.add(pair);
        pair = new Pair<>(2, "abcd");
        pairs.add(pair);
        pair = new Pair<>(3, "ab");
        pairs.add(pair);
        pair = new Pair<>(4, "abcde");
        pairs.add(pair);
        pairs.sort((pair1, pair2)->{return new Integer(pair1.getValue().length()).compareTo(new Integer(pair2.getValue().length()));});
    }
}
2.用TreeMap進(jìn)行排序

用配對(duì)進(jìn)行存儲(chǔ)初步解決了目的,但是這樣存儲(chǔ)的就不是Map而是ArrayList的了,也就不能使用Map的方法,雖然解決了需求,但是感覺方向錯(cuò)了,去網(wǎng)上一搜,返現(xiàn)Map有能夠排序的實(shí)現(xiàn)類TreeMap,他僅需創(chuàng)建時(shí)傳入Comparator的接口實(shí)現(xiàn)類,就能夠?qū)崿F(xiàn)存儲(chǔ)是排序了:

public class Main {

    public static void main(String[] args) {
        TreeMap treeMap = new TreeMap((s1, s2)->{
            return new Integer(s1.length()).compareTo(new Integer(s2.length()));
        });
        treeMap.put("abc", 1);
        treeMap.put("abcd", 2);
        treeMap.put("ab", 3);
        treeMap.put("abcde", 4);
    }
}

代碼簡短,通俗易懂,但是因?yàn)門reeMap只能按照key進(jìn)行排序,而我的要求是根據(jù)value的長度進(jìn)行排序,所有在這里我把key和value的類型互換了,但這樣之前可以通過int類型的編號(hào)找到string類型值,在更改之后,就不能通過標(biāo)號(hào)找到值了.雖然有好處良多,但是不符合我的情況.

3.HashMap轉(zhuǎn)成list再排序

HashMap的對(duì)象有一個(gè)方法,他可以把所有的鍵值對(duì)集合轉(zhuǎn)換為一個(gè)set集合,集合元素是Map.Entry,可以把HashMap轉(zhuǎn)換為Set之后再轉(zhuǎn)換成ArrayList再調(diào)用sort方法進(jìn)行排序,達(dá)到根據(jù)value進(jìn)行排序的效果:

public class Main {

    public static void main(String[] args) {
        HashMap hashMap = new HashMap<>();
        hashMap.put(1, "aec");
        hashMap.put(2, "abcd");
        hashMap.put(3, "ab");
        hashMap.put(4, "abcde");
        ArrayList> arrayList = new ArrayList<>(hashMap.entrySet());
        arrayList.sort((entry1, entry2)->{
            return new Integer(entry1.getValue().length()).compareTo(new Integer(entry2.getValue().length()));
        });
    }
}

感覺這是第一種方法,加上一個(gè)HashMap得到的結(jié)果,這樣可以從按照value進(jìn)行排序(排序結(jié)果保存在arrayList中),也可以從key找到value(在HashMap中),但是存儲(chǔ)內(nèi)存卻浪費(fèi)了,多了一個(gè)list,不知道有沒有直接根據(jù)value直接排序的map.

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/71996.html

相關(guān)文章

  • Java中Map的排序

    摘要:的種類在中,的主要作用是存儲(chǔ)鍵值對(duì)。保存了記錄的插入順序,在用遍歷時(shí),先得到的記錄肯定是先插入的也可以在構(gòu)造時(shí)用帶參數(shù),按照應(yīng)用次數(shù)排序。按值排序由于中并沒有此功能,所以我們需要自己實(shí)現(xiàn)。思路如下中是可以使用接口的。 Map的種類 在Java中,Map的主要作用是存儲(chǔ)鍵值對(duì)。由于是根據(jù)鍵得到值,所以不允許鍵重復(fù)。它主要有如下幾個(gè)類別: HashMap: 最常用的Map,它根據(jù)鍵的Ha...

    pkhope 評(píng)論0 收藏0
  • 看例子,學(xué) Python(二)

    摘要:看例子,學(xué)二看例子,學(xué)一看例子,學(xué)三模塊文件定義了函數(shù)和,就是一個(gè)模塊。這個(gè)列表里的每個(gè)元素都是一個(gè)鍵值對(duì),由元組表示。指定的為,便以每個(gè)鍵值對(duì)元組下標(biāo)為的元素進(jìn)行排序。可將其它序列類型轉(zhuǎn)換成元組看例子,學(xué)一看例子,學(xué)三 看例子,學(xué) Python(二) 看例子,學(xué) Python(一)看例子,學(xué) Python(三) 模塊 文件 mymath.py 定義了函數(shù) fib 和 fac,myma...

    CoderDock 評(píng)論0 收藏0
  • Java 集合Hashtable源碼深入解析

    摘要:分別獲取正序反序的鍵集。是用來實(shí)現(xiàn)機(jī)制的第部分源碼解析基于為了更了解的原理,下面對(duì)源碼代碼作出分析。實(shí)現(xiàn)了迭代器和枚舉兩個(gè)接口獲取的迭代器若的實(shí)際大小為則返回空迭代器對(duì)象否則,返回正常的的對(duì)象。 概要 前面,我們已經(jīng)系統(tǒng)的對(duì)List進(jìn)行了學(xué)習(xí)。接下來,我們先學(xué)習(xí)Map,然后再學(xué)習(xí)Set;因?yàn)镾et的實(shí)現(xiàn)類都是基于Map來實(shí)現(xiàn)的(如,HashSet是通過HashMap實(shí)現(xiàn)的,TreeSe...

    Turbo 評(píng)論0 收藏0
  • Java集合框架——Map接口

    摘要:第三階段常見對(duì)象的學(xué)習(xí)集合框架集合在實(shí)際需求中,我們常常會(huì)遇到這樣的問題,在諸多的數(shù)據(jù)中,通過其編號(hào)來尋找某一些信息,從而進(jìn)行查看或者修改,例如通過學(xué)號(hào)查詢學(xué)生信息。面試題和的區(qū)別是單列集合的頂層接口,有子接口和。 第三階段 JAVA常見對(duì)象的學(xué)習(xí) 集合框架——Map集合 showImg(https://segmentfault.com/img/remote/1460000019683...

    princekin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<