最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 互相關(guān)聯(lián)的實(shí)體無限遞歸問題的解決

 更新時間:2021年10月15日 11:35:51   作者:我是蟻人  
這篇文章主要介紹了Java 互相關(guān)聯(lián)的實(shí)體無限遞歸問題的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Java 互相關(guān)聯(lián)的實(shí)體無限遞歸

今天在測試的時候出現(xiàn)了一個bug,在把關(guān)聯(lián)實(shí)體序列化返回的過程中報錯了,提示

Caused by: java.lang.StackOverflowError: null

這個是堆棧溢出錯誤,根據(jù)錯誤線索查找,最后發(fā)現(xiàn)Column和Table實(shí)體互相關(guān)聯(lián),也就是說

Column實(shí)體中有Table屬性,Table實(shí)體中也有Column屬性,導(dǎo)致了在序列化的過程中出現(xiàn)了死循環(huán),無限遞歸,以至堆棧溢出報錯。

在Jackson2.0以前的解決辦法是

在關(guān)聯(lián)的屬性上添加

@JsonBackReference

或者

@JsonIgnore

注解中的一個即可。但是從Jackson2.0以后的版本開始,提供@JsonIdentityInfo注解實(shí)現(xiàn)這個問題的解決,在實(shí)體類前加注解

@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")

好好理解Java中的遞歸

遞歸的思想

把規(guī)模大的問題轉(zhuǎn)化為規(guī)模小的相似的子問題來解決。在函數(shù)實(shí)現(xiàn)時,因?yàn)榻鉀Q大問題的方法和解決小問題的方法往往是同一個方法,所以就產(chǎn)生了函數(shù)調(diào)用它自身的情況。另外這個解決問題的函數(shù)必須有明顯的結(jié)束條件,這樣就不會產(chǎn)生無限遞歸的情況了。

一句話總結(jié):遞歸就是自己調(diào)用自己。

遞歸的條件要素

1、遞歸有兩個重要條件

  • 可以通過遞歸調(diào)用來縮小問題規(guī)模,且新問題與原問題有著相同的形式。(自身調(diào)用)
  • 存在一種簡單情境,可以使遞歸在簡單情境下退出。(遞歸出口)

2、遞歸的三要素

  • 嘗試將一個問題化簡到更小的規(guī)模
  • 父問題與子問題不能有重疊的部分
  • 一定有一種可以退出程序的情況

遞歸的算法結(jié)構(gòu)

遞歸的常用算法偽代碼如下:

func( mode){
    if(endCondition){      //遞歸出口
          end;
    }else{
         func(mode_small)  //調(diào)用本身,遞歸
    }
}

遞歸實(shí)戰(zhàn)舉例

遞歸講起來還是有點(diǎn)小抽象,我們直接來看代碼

1、斐波那契數(shù)的遞歸實(shí)現(xiàn)

斐波那契數(shù)列的遞推公式:Fib(n)=Fib(n-1)+Fib(n-2),生成數(shù)列(1、1、2、3、5、8...)。

public static int fib(int n) throws Exception {
    if (n < 0){
        throw new Exception("請輸入正確的參數(shù)");
   } else if (n == 0 || n == 1){
        return n;
   } else {
        return fib(n - 1) + fib(n - 2); // 調(diào)用自己
   }
}

2、99乘法表的遞歸實(shí)現(xiàn)

public static void mul(int n){
        if(n==1){
            System.out.println("1*1=1");
        }else {
            mul(n -1);
            for(int i=1;i<=n;i++){
                System.out.println(i + "*" + n + "=" + i*n + " ");
            }
        }
    }

小結(jié)一下吧

遞歸算法是一種直接或間接地調(diào)用自身的算法。如果一個問題可以解可以分解為幾個子問題的解; 這個問題與分解之后的子問題,除了數(shù)據(jù)規(guī)模不同,求解思路完全一樣;并且存在明顯的遞歸終止條件;那么遞歸將是一種不錯的選擇。

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java集合功能與用法實(shí)例詳解

    Java集合功能與用法實(shí)例詳解

    這篇文章主要介紹了Java集合功能與用法,結(jié)合實(shí)例形式詳細(xì)分析了java集合的基本概念、功能、原理、操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • Java?API文檔的使用方法詳解

    Java?API文檔的使用方法詳解

    在開發(fā)過程中如果遇到疑難問題,除了可以在網(wǎng)絡(luò)中尋找答案,也可以在Java API幫助文檔(簡稱"JDK文檔"”)中查找答案,下面這篇文章主要給大家介紹了關(guān)于Java?API文檔使用的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • Java中統(tǒng)計字符個數(shù)以及反序非相同字符的方法詳解

    Java中統(tǒng)計字符個數(shù)以及反序非相同字符的方法詳解

    本篇文章是對Java中統(tǒng)計字符個數(shù)以及反序非相同字符的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 關(guān)于BigDecimal類型之間比較問題

    關(guān)于BigDecimal類型之間比較問題

    這篇文章主要介紹了關(guān)于BigDecimal類型之間比較問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java中值傳遞的深度分析

    Java中值傳遞的深度分析

    這篇文章主要給大家介紹了關(guān)于Java中值傳遞的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • java -jar設(shè)置添加啟動參數(shù)實(shí)現(xiàn)方法

    java -jar設(shè)置添加啟動參數(shù)實(shí)現(xiàn)方法

    這篇文章主要介紹了java -jar設(shè)置添加啟動參數(shù)實(shí)現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java ArrayList與LinkedList及HashMap容器的用法區(qū)別

    Java ArrayList與LinkedList及HashMap容器的用法區(qū)別

    這篇文章主要介紹了Java ArrayList與LinkedList及HashMap容器的用法區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-07-07
  • Java中CyclicBarrier和CountDownLatch的用法與區(qū)別

    Java中CyclicBarrier和CountDownLatch的用法與區(qū)別

    CyclicBarrier和CountDownLatch這兩個工具都是在java.util.concurrent包下,并且平時很多場景都會使用到。本文將會對兩者進(jìn)行分析,記錄他們的用法和區(qū)別,感興趣的可以了解一下
    2021-08-08
  • 消息中間件ActiveMQ的簡單入門介紹與使用

    消息中間件ActiveMQ的簡單入門介紹與使用

    消息隊(duì)列是指利用高效可靠的消息傳遞機(jī)制進(jìn)行與平臺無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進(jìn)行分布式系統(tǒng)的集成,這篇文章主要給大家介紹了關(guān)于ActiveMQ的簡單入門介與使用的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • Java中實(shí)現(xiàn)線程間通信的實(shí)例教程

    Java中實(shí)現(xiàn)線程間通信的實(shí)例教程

    線程通信的目標(biāo)是使線程間能夠互相發(fā)送信號,另一方面線程通信使線程能夠等待其他線程的信號,這篇文章主要給大家介紹了關(guān)于Java中實(shí)現(xiàn)線程間通信的相關(guān)資料,本文通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09

最新評論

孟州市| 社旗县| 松江区| 藁城市| 兰溪市| 雷州市| 西乌| 大洼县| 陇西县| 拉孜县| 伊吾县| 陇西县| 东平县| 盱眙县| 富裕县| 中西区| 顺义区| 夏邑县| 布尔津县| 五河县| 江阴市| 夹江县| 福州市| 兰州市| 祁东县| 汾阳市| 克东县| 广丰县| 陇南市| 沁水县| 平顺县| 龙海市| 阿荣旗| 溆浦县| 灵山县| 临夏市| 右玉县| 通河县| 沭阳县| 京山县| 抚州市|