欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

<menuitem id="h6kwl"></menuitem>
<thead id="h6kwl"><video id="h6kwl"><listing id="h6kwl"></listing></video></thead>
  • <menuitem id="h6kwl"></menuitem>

      <pre id="h6kwl"></pre><bdo id="h6kwl"></bdo>
      1. 海量數(shù)據(jù)去重排序bitmap(位圖法)在java中實(shí)現(xiàn)的兩種方法

         更新時(shí)間:2019年02月18日 09:18:43   作者:gavenyeah  
        今天小編就為大家分享一篇關(guān)于海量數(shù)據(jù)去重排序bitmap(位圖法)在java中實(shí)現(xiàn)的兩種方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

        在海量數(shù)據(jù)中查找出重復(fù)出現(xiàn)的元素或者去除重復(fù)出現(xiàn)的元素是面試中??嫉奈膱D。針對(duì)此類問題,可以使用位圖法來解決。例如:已知某個(gè)文件內(nèi)包含若干個(gè)電話號(hào)碼,要求統(tǒng)計(jì)不同的號(hào)碼的個(gè)數(shù),甚至在O(n)時(shí)間復(fù)雜度內(nèi)對(duì)這些號(hào)碼進(jìn)行排序。

        位圖法需要的空間很少(依賴于數(shù)據(jù)分布,但是我們也可以通過一些放啊發(fā)對(duì)數(shù)據(jù)進(jìn)行處理,使得數(shù)據(jù)變得密集),在數(shù)據(jù)比較密集的時(shí)候效率非常高。例如:8位整數(shù)可以表示的最大十進(jìn)制數(shù)值為99999999,如果每個(gè)數(shù)組對(duì)應(yīng)于一個(gè)bit位,那么把所有的八進(jìn)制整數(shù)存儲(chǔ)起來只需要:99Mbit = 12.375MB.

        實(shí)際上,java jdk1.0已經(jīng)提供了bitmap的實(shí)現(xiàn)BitSet類,不過其中的某些方法是jdk1.4之后才有的。

        下面我先自己實(shí)現(xiàn)一下bitmap 的原理,然后再直接調(diào)用jdk的BitSet類分別實(shí)現(xiàn)bitmap, 方便比較理解:

        package swordoffer;
        //去除重復(fù)并排序
        import java.util.Arrays;
        import java.util.BitSet;
        import java.util.Random;
        /**
         * @author Gavenyeah
         * @date Time:
         * @des:
         */
        public class BitMap {
          int ARRNUM = 800;
          int LEN_INT = 32;
          int mmax = 9999;
          int mmin = 1000;
          int N = mmax - mmin + 1;
          public static void main(String args[]) {
             new BitMap().findDuplicate();
            new BitMap().findDup_jdk();
          }
          public void findDup_jdk() {
            System.out.println("*******調(diào)用JDK中的庫方法--開始********");
            BitSet bitArray = new BitSet(N);
            int[] array = getArray(ARRNUM);
            for (int i = 0; i < ARRNUM; i++) {
              bitArray.set(array[i] - mmin);
            }
            int count = 0;
            for (int j = 0; j < bitArray.length(); j++) {
              if (bitArray.get(j)) {
                System.out.print(j + mmin + " ");
                count++;
              }
            }
            System.out.println();
            System.out.println("排序后的數(shù)組大小為:" + count );
            System.out.println("*******調(diào)用JDK中的庫方法--結(jié)束********");
          }
          public void findDuplicate() {
            int[] array = getArray(ARRNUM);
            int[] bitArray = setBit(array);
            printBitArray(bitArray);
          }
          public void printBitArray(int[] bitArray) {
            int count = 0;
            for (int i = 0; i < N; i++) {
              if (getBit(bitArray, i) != 0) {
                count++;
                System.out.print(i + mmin + "\t");
              }
            }
            System.out.println();
            System.out.println("去重排序后的數(shù)組大小為:" + count);
          }
          public int getBit(int[] bitArray, int k) {// 1右移 k % 32位 與上 數(shù)組下標(biāo)為 k/32 位置的值
            return bitArray[k / LEN_INT] & (1 << (k % LEN_INT));
          }
          public int[] setBit(int[] array) {// 首先取得數(shù)組位置下標(biāo) i/32, 然后 或上
                            // 在該位置int類型數(shù)值的bit位:i % 32
            int m = array.length;
            int bit_arr_len = N / LEN_INT + 1;
            int[] bitArray = new int[bit_arr_len];
            for (int i = 0; i < m; i++) {
              int num = array[i] - mmin;
              bitArray[num / LEN_INT] |= (1 << (num % LEN_INT));
            }
            return bitArray;
          }
          public int[] getArray(int ARRNUM) {
            @SuppressWarnings("unused")
            int array1[] = { 1000, 1002, 1032, 1033, 6543, 9999, 1033, 1000 };
            int array[] = new int[ARRNUM];
            System.out.println("數(shù)組大小:" + ARRNUM);
            Random r = new Random();
            for (int i = 0; i < ARRNUM; i++) {
              array[i] = r.nextInt(N) + mmin;
            }
            System.out.println(Arrays.toString(array));
            return array;
          }
        }

        總結(jié)

        以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

        相關(guān)文章

        • 啟動(dòng)Springboot項(xiàng)目時(shí)找不到Mapper的問題及解決

          啟動(dòng)Springboot項(xiàng)目時(shí)找不到Mapper的問題及解決

          這篇文章主要介紹了啟動(dòng)Springboot項(xiàng)目時(shí)找不到Mapper的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
          2023-11-11
        • java使用CountDownLatch實(shí)現(xiàn)多線程協(xié)作

          java使用CountDownLatch實(shí)現(xiàn)多線程協(xié)作

          在多線程編程中,經(jīng)常需要實(shí)現(xiàn)一種機(jī)制來協(xié)調(diào)多個(gè)線程的執(zhí)行,以確保某些操作在所有線程完成后再進(jìn)行,CountDownLatch?就是?Java?并發(fā)包中提供的一種同步工具,下面我們就來看看如何使用CountDownLatch實(shí)現(xiàn)多線程協(xié)作吧
          2023-11-11
        • Spring中@Qualifier注解的用法

          Spring中@Qualifier注解的用法

          但凡有點(diǎn)開發(fā)經(jīng)驗(yàn),多多少少可能都遇到過@Qualifier注解的使用場(chǎng)景,本文主要介紹了Spring中@Qualifier注解的用法,感興趣的可以了解一下
          2023-11-11
        • 詳解Java如何實(shí)現(xiàn)防止惡意注冊(cè)

          詳解Java如何實(shí)現(xiàn)防止惡意注冊(cè)

          惡意注冊(cè)通常是指使用自動(dòng)化腳本或者機(jī)器人在短時(shí)間內(nèi)進(jìn)行大量的注冊(cè)行為,這種行為會(huì)對(duì)系統(tǒng)造成壓力,甚至?xí)?dǎo)致系統(tǒng)癱瘓。所以本文為大家總結(jié)了一些防止惡意注冊(cè)的方法,需要的可以參考一下
          2023-04-04
        • java Scanner輸入數(shù)字、字符串過程解析

          java Scanner輸入數(shù)字、字符串過程解析

          這篇文章主要介紹了java Scanner輸入數(shù)字、字符串過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
          2019-10-10
        • 淺談在Spring中如何使用數(shù)據(jù)源(DBCP、C3P0、JNDI)

          淺談在Spring中如何使用數(shù)據(jù)源(DBCP、C3P0、JNDI)

          這篇文章主要介紹了淺談在Spring中如何使用數(shù)據(jù)源(DBCP、C3P0、JNDI),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
          2018-10-10
        • Java并發(fā)編程之工具類Semaphore的使用

          Java并發(fā)編程之工具類Semaphore的使用

          目前幾乎所有的語言都支持信號(hào)量機(jī)制,Java也不例外.Java中提供了Semaphore并發(fā)工具類來支持信號(hào)量機(jī)制,下面我們就來了解Java實(shí)現(xiàn)的信號(hào)量機(jī)制,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
          2021-06-06
        • Java之SpringBoot實(shí)現(xiàn)基本增刪改查(前后端分離版)

          Java之SpringBoot實(shí)現(xiàn)基本增刪改查(前后端分離版)

          這篇文章主要介紹了Java中SpringBoot如何實(shí)現(xiàn)基本的增刪改查,前后端分離版,沒有和前端進(jìn)行聯(lián)系,感興趣的小伙伴可以借鑒閱讀本文
          2023-03-03
        • SpringBoot配置數(shù)據(jù)庫密碼加密的實(shí)現(xiàn)

          SpringBoot配置數(shù)據(jù)庫密碼加密的實(shí)現(xiàn)

          這篇文章主要介紹了SpringBoot配置數(shù)據(jù)庫密碼加密的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
          2021-03-03
        • 詳解阿里云maven鏡像庫配置(gradle,maven)

          詳解阿里云maven鏡像庫配置(gradle,maven)

          這篇文章主要介紹了詳解阿里云maven鏡像庫配置(gradle,maven),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
          2018-02-02

        最新評(píng)論