eBook – Guide Spring Cloud – NPI EA (cat=Spring Cloud)
announcement - icon

Let's get started with a Microservice Architecture with Spring Cloud:

>> Join Pro and download the eBook

eBook – Mockito – NPI EA (tag = Mockito)
announcement - icon

Mocking is an essential part of unit testing, and the Mockito library makes it easy to write clean and intuitive unit tests for your Java code.

Get started with mocking and improve your application tests using our Mockito guide:

Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Reactive – NPI EA (cat=Reactive)
announcement - icon

Spring 5 added support for reactive programming with the Spring WebFlux module, which has been improved upon ever since. Get started with the Reactor project basics and reactive programming in Spring Boot:

>> Join Pro and download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Jackson – NPI EA (cat=Jackson)
announcement - icon

Do JSON right with Jackson

Download the E-book

eBook – HTTP Client – NPI EA (cat=Http Client-Side)
announcement - icon

Get the most out of the Apache HTTP Client

Download the E-book

eBook – Maven – NPI EA (cat = Maven)
announcement - icon

Get Started with Apache Maven:

Download the E-book

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

eBook – RwS – NPI EA (cat=Spring MVC)
announcement - icon

Building a REST API with Spring?

Download the E-book

Course – LS – NPI EA (cat=Jackson)
announcement - icon

Get started with Spring and Spring Boot, through the Learn Spring course:

>> LEARN SPRING
Course – RWSB – NPI EA (cat=REST)
announcement - icon

Explore Spring Boot 3 and Spring 6 in-depth through building a full REST API with the framework:

>> The New “REST With Spring Boot”

Course – LSS – NPI EA (cat=Spring Security)
announcement - icon

Yes, Spring Security can be complex, from the more advanced functionality within the Core to the deep OAuth support in the framework.

I built the security material as two full courses - Core and OAuth, to get practical with these more complex scenarios. We explore when and how to use each feature and code through it on the backing project.

You can explore the course here:

>> Learn Spring Security

Course – LSD – NPI EA (tag=Spring Data JPA)
announcement - icon

Spring Data JPA is a great way to handle the complexity of JPA with the powerful simplicity of Spring Boot.

Get started with Spring Data JPA through the guided reference course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (cat=Spring Boot)
announcement - icon

Refactor Java code safely — and automatically — with OpenRewrite.

Refactoring big codebases by hand is slow, risky, and easy to put off. That’s where OpenRewrite comes in. The open-source framework for large-scale, automated code transformations helps teams modernize safely and consistently.

Each month, the creators and maintainers of OpenRewrite at Moderne run live, hands-on training sessions — one for newcomers and one for experienced users. You’ll see how recipes work, how to apply them across projects, and how to modernize code with confidence.

Join the next session, bring your questions, and learn how to automate the kind of work that usually eats your sprint time.

Partner – LambdaTest – NPI EA (cat=Testing)
announcement - icon

Regression testing is an important step in the release process, to ensure that new code doesn't break the existing functionality. As the codebase evolves, we want to run these tests frequently to help catch any issues early on.

The best way to ensure these tests run frequently on an automated basis is, of course, to include them in the CI/CD pipeline. This way, the regression tests will execute automatically whenever we commit code to the repository.

In this tutorial, we'll see how to create regression tests using Selenium, and then include them in our pipeline using GitHub Actions:, to be run on the LambdaTest cloud grid:

>> How to Run Selenium Regression Tests With GitHub Actions

Course – LJB – NPI EA (cat = Core Java)
announcement - icon

Code your way through and build up a solid, practical foundation of Java:

>> Learn Java Basics

1. Overview

The usage of arrays is very common in programming languages. Inserting and removing elements from an array of numbers is a basic operation we often need. Inserting an element into a sorted array of numbers is a special case of an array insertion.

Let’s see how to insert a number into a sorted array of numbers efficiently.

2. Introduction to Problem

To make inserting a number into a sorted array efficient, we need to minimize the number of position shifts and comparisons. We can achieve this by searching for the insertion index using binary search. Then, shift the elements to the right to make space for the new element.

For example, given that sortedArray is a sorted integer array:

int[] sortedArray = new int[] { 4, 55, 85, 100, 125 };

We want to add a new element 90 to the array. The algorithm should insert the number after 85 and before 100 in an efficient manner:

int[] expcetedArray = new int[] { 4, 55, 85, 90, 100, 125 };

3. Solution

The solution involves two steps. The first is to find the insertion index for the new number. The most efficient way of doing that is with a binary search. Once the index is found, we increase the size of the array by 1, shift the elements from the index up to the end to the right, and insert the new element at the calculated index:

public static int[] insertInSortedArray(int[] arr, int numToInsert) {
    int index = Arrays.binarySearch(arr, numToInsert);

    if (index < 0) {
        index = -(index + 1);
    }

    int[] newArray = new int[arr.length + 1];

    System.arraycopy(arr, 0, newArray, 0, index);

    newArray[index] = numToInsert;

    System.arraycopy(arr, index, newArray, index + 1, arr.length - index);

    return newArray;
}

Arrays.binarySearch(arr, element) returns the element insert index using binary search. The binarySearch() method returns a positive element insert index if the element is found in the array arr. If the element is not found in the array arr, it returns the negation of insert index plus one. Hence, if the returned index value is less than 0, we add 1 and negate it to get the insertion index.

We create a new array of size 1 more than that of the original array and insert the value at the calculated index in the new array. Then, to replicate the shifting of elements from the insert index to the end of the array, we copy values from the original array to the new array.

System.arraycopy() is used to efficiently copy the array before and after the insert index.

Let’s validate our code with a test case:

@Test
void givenSortedArray_whenElementInserted_thenArrayRemainsSorted() {
    int[] sortedArray = new int[] { 4, 55, 85, 100, 125 };
    int[] expcetedArray = new int[] { 4, 55, 85, 90, 100, 125 };
    int valueToInsert = 90;
    int[] resultArray = insertInSortedArray(sortedArray, valueToInsert);
    assertThat(expcetedArray).isEqualTo(resultArray);
}

The test case inserts new element 90 in the array sortedArray. Our insertion method insertInSortedArray() returns the result in the array resultArray. The test case matches the expected output array expectedArray with the result array resultArray. Since the test case passes successfully, it validates our array insertion logic.

Similarly, we can implement the solution for an array of numeric wrapper classes like Integer[], Double[], etc. The only change would be in array type, as both binarySearch() and arrayCopy() methods work with the wrapper class arrays.

4. Time Complexity

As discussed earlier, there are two steps in the solution. The binary search for calculating the insertion index has a time complexity of O(log n), and shifting of the elements has a complexity of O(n). Hence, the overall complexity of the solution is O(n).

5. Conclusion

In this article, we learned that a number can be inserted in a sorted array efficiently in Java by having two steps, i.e., binary search for figuring out the element insert index and right shifting of elements from the element insert index.

The code backing this article is available on GitHub. Once you're logged in as a Baeldung Pro Member, start learning and coding on the project.
Baeldung Pro – NPI EA (cat = Baeldung)
announcement - icon

Baeldung Pro comes with both absolutely No-Ads as well as finally with Dark Mode, for a clean learning experience:

>> Explore a clean Baeldung

Once the early-adopter seats are all used, the price will go up and stay at $33/year.

eBook – HTTP Client – NPI EA (cat=HTTP Client-Side)
announcement - icon

The Apache HTTP Client is a very robust library, suitable for both simple and advanced use cases when testing HTTP endpoints. Check out our guide covering basic request and response handling, as well as security, cookies, timeouts, and more:

>> Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

Course – LS – NPI EA (cat=REST)

announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (tag=Refactoring)
announcement - icon

Modern Java teams move fast — but codebases don’t always keep up. Frameworks change, dependencies drift, and tech debt builds until it starts to drag on delivery. OpenRewrite was built to fix that: an open-source refactoring engine that automates repetitive code changes while keeping developer intent intact.

The monthly training series, led by the creators and maintainers of OpenRewrite at Moderne, walks through real-world migrations and modernization patterns. Whether you’re new to recipes or ready to write your own, you’ll learn practical ways to refactor safely and at scale.

If you’ve ever wished refactoring felt as natural — and as fast — as writing code, this is a good place to start.

eBook Jackson – NPI EA – 3 (cat = Jackson)