* Creating a deep vs shallow copy of an object in Java

* Creating a deep vs shallow copy of an object in Java

* Baeldung article converting number bases

* Baeldung article converting number bases
This commit is contained in:
Iniubong LA 2023-01-09 21:05:23 +00:00 committed by GitHub
parent 42fb696539
commit d2f52b059f
9 changed files with 288 additions and 0 deletions

View File

@ -12,3 +12,4 @@ This module contains articles about core features in the Java language
- [Infinity in Java](https://www.baeldung.com/java-infinity)
- [Type Parameter vs Wildcard in Java Generics](https://www.baeldung.com/java-generics-type-parameter-vs-wildcard)
- [Convert Between int and char in Java](https://www.baeldung.com/java-convert-int-char)
-

View File

@ -0,0 +1,69 @@
package com.baeldung.convertnumberbases;
public class ConvertNumberBases {
public static String convertNumberToNewBase(String number, int base, int newBase){
return Integer.toString(Integer.parseInt(number, base), newBase);
}
public static String convertNumberToNewBaseCustom(String num, int base, int newBase) {
int decimalNumber = convertFromAnyBaseToDecimal(num, base);
return convertFromDecimalToBaseX(decimalNumber, newBase);
}
public static String convertFromDecimalToBaseX(int num, int newBase) {
String result = "";
int remainder;
while (num > 0) {
remainder = num % newBase;
if (newBase == 16) {
if (remainder == 10)
result += 'A';
else if (remainder == 11)
result += 'B';
else if (remainder == 12)
result += 'C';
else if (remainder == 13)
result += 'D';
else if (remainder == 14)
result += 'E';
else if (remainder == 15)
result += 'F';
else
result += remainder;
} else
result += remainder;
num /= newBase;
}
return new StringBuffer(result).reverse().toString();
}
public static int convertFromAnyBaseToDecimal(String num, int base) {
if (base < 2 || (base > 10 && base != 16))
return -1;
int val = 0;
int power = 1;
for (int i = num.length() - 1; i >= 0; i--) {
int digit = charToDecimal(num.charAt(i));
if (digit < 0 || digit >= base)
return -1;
val += digit * power;
power = power * base;
}
return val;
}
public static int charToDecimal(char c) {
if (c >= '0' && c <= '9')
return (int) c - '0';
else
return (int) c - 'A' + 10;
}
}

View File

@ -0,0 +1,20 @@
package com.baeldung.deepshallowcopy;
public class SchoolDeepCopy implements Cloneable{
public String name;
public SchoolDeepCopy(String name){
this.name = name;
}
protected Object clone() throws CloneNotSupportedException{
return super.clone();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

View File

@ -0,0 +1,16 @@
package com.baeldung.deepshallowcopy;
public class SchoolShallowCopy {
public String name;
public SchoolShallowCopy(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

View File

@ -0,0 +1,55 @@
package com.baeldung.deepshallowcopy;
public class StudentDeepCopy implements Cloneable{
public String firstName;
public String lastName;
public String level;
public SchoolDeepCopy school;
public StudentDeepCopy(String firstName, String lastName, String level, SchoolDeepCopy school){
this.firstName = firstName;
this.lastName = lastName;
this.level = level;
this.school = school;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public SchoolDeepCopy getSchool() {
return school;
}
public void setSchool(SchoolDeepCopy school) {
this.school = school;
}
@Override
protected Object clone() throws CloneNotSupportedException {
StudentDeepCopy student = (StudentDeepCopy) super.clone();
student.school = (SchoolDeepCopy) school.clone();
return student;
}
}

View File

@ -0,0 +1,53 @@
package com.baeldung.deepshallowcopy;
public class StudentShallowCopy implements Cloneable{
public String firstName;
public String lastName;
public String level;
public SchoolShallowCopy school;
public StudentShallowCopy(String firstName, String lastName, String level, SchoolShallowCopy school){
this.firstName = firstName;
this.lastName = lastName;
this.level = level;
this.school = school;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public SchoolShallowCopy getSchool() {
return school;
}
public void setSchool(SchoolShallowCopy school) {
this.school = school;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}

View File

@ -0,0 +1,20 @@
package com.baeldung.convertnumberbases;
import static com.baeldung.convertnumberbases.ConvertNumberBases.convertNumberToNewBase;
import static com.baeldung.convertnumberbases.ConvertNumberBases.convertNumberToNewBaseCustom;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class ConvertNumberBasesUnitTest {
@Test
void whenConvertingBase10NumberToBase5_ThenResultShouldBeDigitsInBase5() {
assertEquals(convertNumberToNewBase("89", 10, 5), "324");
}
@Test
void whenConvertingBase2NumberToBase8_ThenResultShouldBeDigitsInBase8() {
assertEquals(convertNumberToNewBaseCustom("11001000", 2, 8), "310");
}
}

View File

@ -0,0 +1,28 @@
package com.baeldung.deepshallowcopy;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class StudentDeepCopyUnitTest {
@Test
void whenDeepCopying_thenCopyObjectMakesCopyOfReferencedObjectInSourceObject(){
SchoolDeepCopy ug = new SchoolDeepCopy("University of Ghana");
StudentDeepCopy studentOne = new StudentDeepCopy("Abena", "Kojo","200L", ug );
StudentDeepCopy studentTwo = null;
try{
studentTwo = (StudentDeepCopy) studentOne.clone();
} catch (CloneNotSupportedException e){
e.printStackTrace();
}
assertNotSame(studentOne.getSchool(),studentTwo.getSchool());
studentTwo.getSchool().setName("University of Nigeria");
assertNotEquals(studentOne.getSchool().getName(), studentTwo.getSchool().getName());
}
}

View File

@ -0,0 +1,26 @@
package com.baeldung.deepshallowcopy;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class StudentShallowCopyUnitTest {
@Test
void whenShallowCopying_thenCopyObjectAndSourceObjectShareSameReferencedObject(){
SchoolShallowCopy ug = new SchoolShallowCopy("University of Ghana");
StudentShallowCopy studentOne = new StudentShallowCopy("Abena", "Kojo","200L", ug );
StudentShallowCopy studentTwo = null;
try{
studentTwo = (StudentShallowCopy) studentOne.clone();
} catch (CloneNotSupportedException e){
e.printStackTrace();
}
assertSame(studentOne.getSchool(),studentTwo.getSchool());
studentTwo.getSchool().setName("University of Nigeria");
assertEquals(studentOne.getSchool().getName(), studentTwo.getSchool().getName());
}
}