自定义sort排序/compareTo排序/Colleactions.sort排序/bitset排序

###################################################
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@AllArgsConstructor
@NoArgsConstructor
@Data
/**
 * @author 1
 */
@Accessors(chain = true)
public class SortEntity implements Comparable<SortEntity> {
    private int id;
    private String ratio;
    private int age;
    private String percentage;

    @Override
    public int compareTo(SortEntity o) {
        // 按照age倒序,id正序排序
        if (this.getAge() > o.getAge()) {
            return -1;
        } else if (this.getAge() < o.getAge()) {
            return 1;
        } else {
            if (this.getAge() > o.getAge()) {
                return 1;
            } else {
                return -1;
            }
        }
    }
}
###########################################################
import com.csw.mysqldate.entity.SortEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class SortTest {
    private static final Logger logger = LoggerFactory.getLogger(SortTest.class);

    public static void main(String[] args) {
        List<SortEntity> sortEntityList = new ArrayList<>();

        SortEntity sortEntity1 = new SortEntity();
        sortEntity1.setId(1);
        sortEntity1.setRatio("34.23");
        sortEntity1.setAge(1);
        sortEntity1.setPercentage("34.23%");
        sortEntityList.add(sortEntity1);


        SortEntity sortEntity2 = new SortEntity();
        sortEntity2.setId(2);
        sortEntity2.setRatio("33.23");
        sortEntity2.setAge(3);
        sortEntity2.setPercentage("33.24%");
        sortEntityList.add(sortEntity2);


        SortEntity sortEntity3 = new SortEntity();
        sortEntity3.setId(3);
        sortEntity3.setRatio("33.23");
        sortEntity3.setAge(2);
        sortEntity3.setPercentage("33.33%");
        sortEntityList.add(sortEntity3);

        SortEntity sortEntity4 = new SortEntity();
        sortEntity4.setId(4);
        sortEntity4.setRatio("35.23");
        sortEntity4.setAge(3);
        sortEntity4.setPercentage("35.23%");
        sortEntityList.add(sortEntity4);

        SortEntity sortEntity5 = new SortEntity();
        sortEntity5.setId(5);
        sortEntity5.setRatio("36.23");
        sortEntity5.setAge(5);
        sortEntity5.setPercentage("36.23%");
        sortEntityList.add(sortEntity5);
        logger.info("" + "//原始//////////////////排序前");
        for (SortEntity sortEntity : sortEntityList) {
            logger.info("" + sortEntity);
        }

//【最新方式】
//按照时间字段降序排序
        //relatedRecommendationVos.sort(Comparator.comparing(RelatedRecommendationVo::getReleaseTime).reversed());
        //多字段
//      resList.sort(Comparator.comparing(UrbanPartyBuildColumnListPcVo::getLevel).thenComparing(UrbanPartyBuildColumnListPcVo::getParentId).thenComparing(UrbanPartyBuildColumnListPcVo::getSequence));

        /**
         * java里面写比较规则,多条件
         */
        sortEntityList.sort((Comparator) (o1, o2) -> {
            SortEntity stu1 = (SortEntity) o1;
            SortEntity stu2 = (SortEntity) o2;
            if (!stu2.getRatio().equals(stu1.getRatio())) {
                return stu2.getRatio().compareTo(stu1.getRatio());
            } else if (!stu2.getPercentage().equals(stu1.getPercentage())) {
                return stu1.getPercentage().compareTo(stu2.getPercentage());
            } else {
                return (stu2.getId() + "").compareTo(stu1.getId() + "");
            }
        });
        logger.info("" + "//String类型排序////////////////////排序后");
        for (SortEntity sortEntity : sortEntityList) {
            logger.info("" + sortEntity);
        }
        /**
         * 用实体里面的比较规则
         */
        sortEntityList.sort(SortEntity::compareTo);
        logger.info("" + "//实体int类型排序////////////////////排序后");
        for (SortEntity sortEntity : sortEntityList) {
            logger.info("" + sortEntity);
        }
        /**
         * java里面写比较规则
         * 单条件
         */
        sortEntityList.sort((Comparator) (o1, o2) -> {
            SortEntity stu1 = (SortEntity) o1;
            SortEntity stu2 = (SortEntity) o2;
            if (!stu2.getPercentage().equals(stu1.getPercentage())) {
                return stu1.getPercentage().compareTo(stu2.getPercentage());
            } else {
                return 1;
            }
        });
        logger.info("" + "//实体per类型排序////////////////////排序后");
        for (SortEntity sortEntity : sortEntityList) {
            System.out.println(sortEntity.getPercentage());
        }

        /**
         * 如果这个类型的升序可以直接用工具类
         *  List<Integer> indexes = new ArrayList<>();
         *  Collections.sort(indexes);
         */
    }

}
###########################################################
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class ShuffListMethodSortBoolean {

    public static int num = 10000;

    public static void main(String[] args) {
        List<String> cardList = new ArrayList<>();
        for (int i = 0; i < 1000000; i++) {
            cardList.add("cardId" + i);
        }

        long startTime = System.currentTimeMillis();

        List<String> randomList = shuffleMethod(cardList);

        long endTime = System.currentTimeMillis();
        System.out.println("花费时间:" + (endTime - startTime));
//        System.out.println(randomList);
    }

    /**
     * 随机拿到配置num数量的数据
     */
    private static List<String> shuffleMethod(List<String> resultList) {
        //防止列表长度比需要的数量短,按照长度短的决定最终数量
        int randomNum = Math.min(num, resultList.size());

        Random random = new Random();
        // 索引列表
        List<Integer> indexes = new ArrayList<>();
        while (indexes.size() < randomNum) {
            int index = random.nextInt(resultList.size());
            if (!indexes.contains(index)) {
                indexes.add(index);
            }
        }

        //对indexes排序
        Collections.sort(indexes);
        //取出indexes对应的list放到newList
        List<String> randomList = new ArrayList<>();
        for (int index : indexes) {
            randomList.add(resultList.get(index));
        }

        return randomList;
    }
}
###########################################################
import java.util.ArrayList;
import java.util.BitSet;
import java.util.List;

public class ShuffListMethodBitSetListBoolean {


    public static void main(String[] args) {
        Long start = System.currentTimeMillis();
        int num = (int) Math.pow(10, 4);
        List<String> cardList = new ArrayList<>();
        for (int i = 0; i < Math.pow(10, 6); i++) {
            cardList.add("cardId" + i);
        }


        // 提供一个方法,随机从cardList中取出num数量的元素,并且新列表的元素顺序和保持和原列表一致(即:原本在前的还在前边)
        List<String> randomList = shuffleMethod(cardList, num);
        // System.out.println(randomList);
        Long end = System.currentTimeMillis();
        System.out.println((end - start) + "ms");
    }

    /**
     * 随机拿到配置num数量的数据
     */
    private static List<String> shuffleMethod(List<String> inputList, int num) {

        num = num <= inputList.size() ? num : inputList.size();

        //存下表
        List<Integer> weiZhi = new ArrayList<>();
        for (int i = 0; i < inputList.size(); i++) {
            weiZhi.add(i);
        }
        //存获取的下标,按照先后顺序来

        List minList = new ArrayList();
        while (minList.size() < num) {
            int xiaBiao = (int) (Math.random() * weiZhi.size());
            if (!minList.contains(xiaBiao)) {
                minList.add(xiaBiao);
            }
        }

        BitSet bit = new BitSet(num);
        int size = bit.length();
        for (int i = 0; i < num; i++) {
            int o = (int) minList.get(i);
            bit.set(weiZhi.get(o));
        }

        List<String> resList = new ArrayList<>();

        for (int index = 0; index < inputList.size(); index++) {
            if (bit.get(index)) {
                resList.add(inputList.get(index));
            }
        }
        return resList;
    }

}
###########################################################
import java.util.BitSet;

public class BitSetDemo {
    public static void main(String[] args) {
        //总长度
        int count = 10;
        //随机取四个
        int i = 4;
        BitSet bit = new BitSet(count);

        while (i > 0) {
            //mei有判重
            bit.set((int) (Math.random() * count));
            i--;
        }

        for (int index = 0; index < count; index++) {
            if (bit.get(index)) {
                System.out.print(index + ",");
            }
        }


    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容