12. Tulis fungsi kanggo nemokake palindrom paling dawa ing senar diwenehi
Senar bisa ngemot senar palindromik, lan nemokake palindrom paling dawa yaiku masalah pemrograman. Titik kunci ing kene yaiku saka tengah palindrome, yen kita pindhah nengen lan ngiwa kanthi 1 karakter, mesthine bakal dadi karakter sing padha. Contone, 12321, tengah 3, lan yen kita terus pindhah saka posisi saiki ing loro arah, kita bakal entuk 2 lan banjur 1. Kita nggunakake logika padha ing program Jawa kanggo nemokake palindrome paling dawa. Nanging, yen dawa palindrome malah, dawa tengah uga malah, supaya kita kudu nggawe manawa iki uga kasedhiya ing program kita, contone, 12333321, tengah 33, lan yen kita terus obah. ing loro arah, kita bakal entuk 3, 2 lan 1. Ing program kita, kita liwat senar asil karo tengah ing Panggonan pisanan lan mriksa karakter kiwa lan tengen. Kita uga duwe rong variabel global kanggo nyimpen posisi awal palindrome. Kita uga kudu mriksa yen ana palindrome maneh sing wis ditemokake, amarga kita bisa nemokake pirang-pirang palindrom ing senar sing diwenehake. Ing ngisor iki minangka conto program sing bisa digunakake ing kabeh kasus. Kita bisa nambah kode ing ndhuwur kanthi mindhah loop nalika menyang cara sing kapisah, nanging aku bakal ninggalake bagean kasebut kanggo sampeyan. Mangga kabari kula yen sampeyan duwe implementasine luwih apik utawa yen program gagal ing sawetara cara.package com.journaldev.util;
public class LongestPalindromeFinder {
public static void main(String[] args) {
System.out.println(longestPalindromeString("1234"));
System.out.println(longestPalindromeString("12321"));
System.out.println(longestPalindromeString("9912321456"));
System.out.println(longestPalindromeString("9912333321456"));
System.out.println(longestPalindromeString("12145445499"));
}
public static String longestPalindromeString(String in) {
char[] input = in.toCharArray();
int longestPalindromeStart = 0;
int longestPalindromeEnd = 0;
for (int mid = 0; mid < input.length; mid++) {
// для случая нечетного палиндрома How 12321, 3 будет серединой
int left = mid-1;
int right = mid+1;
// нам необходимо двигаться влево и вправо на 1 позицию до конца
while (left >= 0 && right < input.length) {
// ниже проверка, является ли это палиндромом
if (input[left] == input[right]) {
// обновление глобальных позиций, только если палиндром длиннее имеющегося
if (right - left > longestPalindromeEnd
- longestPalindromeStart) {
longestPalindromeStart = left;
longestPalindromeEnd = right;
}
}
left--;
right++;
}
// для четного палиндрома у нас должна быть подобная логика с размером середины 2
// для этого мы начнем на одну позицию правее
left = mid-1;
right = mid + 2;// к примеру, для 12333321 мы выбрали 33 в качестве середины
while (left >= 0 && right < input.length)
{
if (input[left] == input[right]) {
if (right - left > longestPalindromeEnd
- longestPalindromeStart) {
longestPalindromeStart = left;
longestPalindromeEnd = right;
}
}
left--;
right++;
}
}
// теперь у нас есть позиции для самого длинного палиндрома
return in.substring(longestPalindromeStart, longestPalindromeEnd + 1);
}
}
Program bakal output ing ngisor iki:
1
12321
12321
12333321
454454
13. Apa sing beda antarane String, StringBuffer lan StringBuilder
Senar ora bisa diganti lan dirampungake ing Jawa, mula kabeh manipulasi senar bakal tansah nggawe senar anyar. Manipulasi string intensif sumber daya, mula Jawa nyedhiyakake rong kelas migunani kanggo manipulasi string -StringBuffer
lan StringBuilder
. StringBuffer
lan StringBuilder
kelas mutable. Operasi kanthi StringBuffer
aman lan disinkronake, nanging cara StringBuilder
ora aman. Dadi nalika sawetara Utas digunakake ing senar padha kita kudu nggunakake StringBuffer
, nanging ing lingkungan Utas siji kita kudu nggunakake StringBuilder
. StringBuilder
luwih produktif tinimbang StringBuffer
amarga ora dibebani karo sinkronisasi.
14. Kenging punapa senar menika boten saged dipunowahi lan dipunrampungaken wonten ing basa Jawi?
Ana sawetara kaluwihan kanggo immutability string:-
String pooling mung bisa amarga senar ora bisa diganti ing Jawa, saéngga mesin virtual ngirit akeh ruang tumpukan amarga variabel senar sing beda nuduhake variabel sing padha ing blumbang. Yen senar ora bisa diowahi, mula interning string ora bisa ditindakake, amarga yen ana variabel sing ngganti nilai, variabel liyane sing ngrujuk string kasebut uga bakal kena pengaruh.
-
Yen senar iku mutable, banjur dadi resiko keamanan serius kanggo aplikasi. Contone, jeneng pangguna lan tembung sandhi database diterusake minangka senar kanggo entuk sambungan menyang database lan ing program soket, rincian host lan port diterusake minangka senar. Wiwit senar ora bisa diganti, regane ora bisa diganti, yen ora, peretas bisa ngganti nilai link kasebut lan nyebabake masalah keamanan aplikasi kasebut.
-
Wiwit senar ora bisa diganti, iku aman kanggo benang lan siji conto senar bisa dienggo bareng ing antarane benang sing beda-beda. Iki ngindari sinkronisasi kanggo safety thread, strings rampung aman thread.
-
String digunakake ing Jawa
classloader
lan immutability njamin yen kelas dimuat kanthi bener nggunakakeClassloader
. Contone, mikir babagan conto kelas nalika sampeyan nyoba mbukakjava.sql.Connection
kelas, nanging nilai referensi diganti dadimyhacked.Connection
kelas sing bisa nindakake perkara sing ora dikarepake ing database sampeyan. -
Wiwit senar iku immutable, iku
hashcode
cached nalika nggawe lan ora perlu kanggo ngetung maneh. Iki ndadekake senar kasebut minangka calon sing apik kanggo key inMap
lan prosese bakal luwih cepet tinimbang tombol liyaneHashMap
. Iki minangka alesan kenapa senar minangka obyek sing paling umum digunakake minangka kunciHashMap
.
15. Kepiye carane mbagi senar dadi bagean?
Kita bisa nggunakake carasplit(String regex)
kanggo pamisah string menyang Uploaded saka strings nggunakake expression biasa minangka delimiter.
import java.util.Arrays;
public class JavaSplitString {
public static void main(String[] args) {
String line = "I am a java developer";
String[] words = line.split(" ");
String[] twoWords = line.split(" ", 2);
System.out.println("String split with delimiter: "+Arrays.toString(words));
System.out.println("String split into two: "+Arrays.toString(twoWords));
//split string delimited with special characters
String wordsWithNumbers = "I|am|a|java|developer";
String[] numbers = wordsWithNumbers.split("\\|");
System.out.println("String split with special character: "+Arrays.toString(numbers));
}
}
Cara kasebut split(String regex, int numOfStrings)
minangka cara sing kakehan kanggo misahake senar dadi sawetara garis sing ditemtokake. Kita bisa nggunakake backslash kanggo nggunakake ekspresi reguler karakter khusus minangka karakter biasa. Program kasebut bakal ngasilake ing ngisor iki:
String split with delimiter: [I, am, a, java, developer]
String split into two: [I, am a java developer]
String split with special character: [I, am, a, java, developer]
16. Yagene array senar luwih disenengi tinimbang senar kanggo nyimpen sandhi?
Senar ora bisa diganti ing Jawa lan disimpen ing blumbang senar. Sawise digawe, iku tetep ing blumbang nganti uwuh diklumpukake, supaya nalika kita mikir wis rampung karo sandi, iku tetep kasedhiya ing memori kanggo sawetara wektu lan ora ana cara kanggo nyegah iki. Iki minangka risiko keamanan amarga sapa wae sing duwe akses menyang mbucal memori bakal bisa nemokake sandhi ing teks sing cetha. Yen kita nggunakake array karakter kanggo nyimpen sandi, kita bisa mbusak sandi sawise kita wis rampung karo. Kanthi cara iki kita bisa ngontrol suwene tetep ing memori, ngindhari risiko keamanan sing ana ing senar.17. Kepriye carane nyemak senar loro ing basa Jawa?
Ana rong cara kanggo mriksa yen rong senar padha karo - nggunakake==
operator "", utawa nggunakake equals
. Nalika kita nggunakake ==
operator "", mriksa Nilai saka senar minangka referensi, nanging ing program paling wektu kita mriksa podo senar mung kanggo Nilai. Mulane, kita kudu nggunakake cara padha kanggo nyoba loro strings kanggo kesetaraan. Ana uga cara equalsIgnoreCase
sing bisa digunakake kanggo nglirwakake kasus.
String s1 = "abc";
String s2 = "abc";
String s3= new String("abc");
System.out.println("s1 == s2 ? "+(s1==s2)); //true
System.out.println("s1 == s3 ? "+(s1==s3)); //false
System.out.println("s1 equals s3 ? "+(s1.equals(s3))); //true
18. Apa iku blumbang string?
Kaya jeneng kasebut, blumbang senar yaiku kumpulan senar sing disimpen ing tumpukan Jawa. Kita ngerti yenString
iki kelas khusus ing Jawa lan kita bisa nggawe obyek saka kelas iki nggunakake operator anyar kaya kita bisa nggawe obyek kanthi menehi nilai senar ing kuotasi pindho. Diagram ing ngisor iki nerangake carane blumbang senar diparengake ing tumpukan Jawa lan apa mengkono nalika kita nggunakake macem-macem cara kanggo nggawe strings. String pooling mung bisa ditindakake amarga immutability strings Jawa lan implementasine gagasan string interning. Kolam senar uga minangka conto pola Flyweight. Kolam renang string mbantu nyimpen akeh memori, nanging ing sisih liya, nggawe baris mbutuhake wektu luwih akeh. Nalika kita nggunakake kuotasi pindho kanggo nggawe senar, pisanan katon kanggo senar ing blumbang karo Nilai padha, yen ketemu banjur mung bali referensi, digunakake senar anyar digawe ing blumbang lan banjur bali referensi. Nanging, nalika kita nggunakake operator anyar, kita meksa kelas String
kanggo nggawe obyek senar anyar, lan banjur kita bisa nggunakake cara intern()
kanggo sijine senar menyang blumbang, utawa njaluk referensi saka blumbang kanggo obyek liyane String
karo Nilai padha. Ing ngisor iki conto sing nuduhake carane blumbang senar dianggo.
public class StringPool {
public static void main(String[] args) {
String s1 = "Cat";
String s2 = "Cat";
String s3 = new String("Cat");
System.out.println("s1 == s2 :"+(s1==s2));
System.out.println("s1 == s3 :"+(s1==s3));
}
}
Program bakal output ing ngisor iki:
s1 == s2 :true
s1 == s3 :false
19. Apa cara intern ()?
Nalika cara kasebutintern()
diarani, yen blumbang senar wis ngemot senar sing padha karo obyek kita, kaya sing diverifikasi dening metode kasebut equals(Object)
, banjur referensi kanggo senar saka blumbang kasebut bali. Yen ora, obyek senar ditambahake menyang blumbang lan referensi kanggo obyek kasebut bali. Cara iki tansah ngasilake senar sing nduweni nilai sing padha karo senar saiki, nanging njamin yen bakal dadi senar saka blumbang senar unik. Ing ngisor iki conto cara kerjane intern()
:
public class StringPool { public static void main(String[] args) { String a = "string a"; String b = new String("string a"); String c = b.intern(); System.out.println(a == b); System.out.println(b == c); System.out.println(a == c); } } Программа выведет следующее:
false false true
20. Apa aman benang ing Jawa?
String ora bisa diganti, mula kita ora bisa ngganti nilai ing program kasebut. Mulane padha aman thread lan bisa digunakake kanthi aman ing lingkungan multi-Utas.21. Kenapa String dadi kunci populer ing HashMap ing Jawa?
Wiwit strings ora bisa diganti, kode hash kasebut di-cache nalika digawe lan ora mbutuhake recalculation. Iki ndadekake strings minangka calon sing apik kanggo kunciMap
lan diproses luwih cepet tinimbang obyek kunci liyane HashMap
. Mulane senar umume digunakake minangka kunci HashMap
. Muga-muga pitakonan sing kadhaptar ing artikel iki bisa mbantu sampeyan ing wawancara, muga-muga aku ngerti yen aku ora kejawab. Link menyang artikel asli Pengarang: Pankaj Kumar
GO TO FULL VERSION