From 99d90bb873d7cf55c05d90c9b865d54ecbb30ac6 Mon Sep 17 00:00:00 2001 From: pazis Date: Wed, 14 Aug 2019 15:06:10 +0000 Subject: [PATCH 1/3] InterpolationSearch --- .../InterpolationSearch.java | 35 +++++++++++++++++++ .../InterpolationSearchUnitTest.java | 29 +++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearch.java create mode 100644 algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearchUnitTest.java diff --git a/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearch.java b/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearch.java new file mode 100644 index 0000000000..91423eeaa8 --- /dev/null +++ b/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearch.java @@ -0,0 +1,35 @@ +package com.baeldung.algorithms.interpolationsearch; + +public class InterpolationSearch { + + public static int interpolationSearch(int[] data, int item) { + + int highEnd = (data.length - 1); + int lowEnd = 0; + + while (item >= data[lowEnd] && item <= data[highEnd] && lowEnd <= highEnd) { + + int probe = lowEnd + (highEnd - lowEnd) * (item - data[lowEnd]) / (data[highEnd] - data[lowEnd]); + + if (highEnd == lowEnd) { + if (data[lowEnd] == item) { + return lowEnd; + } else { + return -1; + } + } + + if (data[probe] == item) { + return probe; + } + + if (data[probe] < item) { + lowEnd = probe + 1; + } else { + highEnd = probe - 1; + } + } + return -1; + } + +} diff --git a/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearchUnitTest.java b/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearchUnitTest.java new file mode 100644 index 0000000000..8ad962055e --- /dev/null +++ b/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearchUnitTest.java @@ -0,0 +1,29 @@ +package com.baeldung.algorithms.interpolationsearch; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +public class InterpolationSearchUnitTest { + + private int[] myData; + + @Before + public void setUp() { + myData = new int[]{13,21,34,55,69,73,84,101}; + } + + @Test + public void givenSortedArray_whenLookingFor84_thenReturn6() { + int pos = InterpolationSearch.interpolationSearch(myData, 84); + assertEquals(6, pos); + } + + @Test + public void givenSortedArray_whenLookingFor19_thenReturnMinusOne() { + int pos = InterpolationSearch.interpolationSearch(myData, 19); + assertEquals(-1, pos); + } + +} From a14c19d4e2b70b6cc7a4672919c3601e34b76d5b Mon Sep 17 00:00:00 2001 From: pazis Date: Fri, 23 Aug 2019 21:21:20 +0000 Subject: [PATCH 2/3] stax --- .../com/baeldung/xml/stax/StaxParser.java | 67 +++++++++++++++++++ .../java/com/baeldung/xml/stax/WebSite.java | 40 +++++++++++ .../baeldung/xml/stax/StaxParserUnitTest.java | 31 +++++++++ xml/src/test/resources/xml/websites.xml | 18 +++++ 4 files changed, 156 insertions(+) create mode 100644 xml/src/main/java/com/baeldung/xml/stax/StaxParser.java create mode 100644 xml/src/main/java/com/baeldung/xml/stax/WebSite.java create mode 100644 xml/src/test/java/com/baeldung/xml/stax/StaxParserUnitTest.java create mode 100644 xml/src/test/resources/xml/websites.xml diff --git a/xml/src/main/java/com/baeldung/xml/stax/StaxParser.java b/xml/src/main/java/com/baeldung/xml/stax/StaxParser.java new file mode 100644 index 0000000000..6c06bfdb17 --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/stax/StaxParser.java @@ -0,0 +1,67 @@ +package com.baeldung.xml.stax; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.util.List; +import java.util.ArrayList; + +import javax.xml.stream.events.XMLEvent; +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.EndElement; +import javax.xml.stream.events.StartElement; +import javax.xml.namespace.QName; + +public class StaxParser { + + public static List parse(String path) { + List webSites = new ArrayList(); + WebSite webSite = null; + XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + try { + XMLEventReader reader = xmlInputFactory.createXMLEventReader(new FileInputStream(path)); + while(reader.hasNext()){ + XMLEvent nextEvent = reader.nextEvent(); + if (nextEvent.isStartElement()){ + StartElement startElement = nextEvent.asStartElement(); + switch (startElement.getName().getLocalPart()) { + case "website": + webSite = new WebSite(); + Attribute url = startElement.getAttributeByName(new QName("url")); + if (url != null) { + webSite.setUrl(url.getValue()); + } + break; + case "name": + nextEvent = reader.nextEvent(); + webSite.setName(nextEvent.asCharacters().getData()); + break; + case "category": + nextEvent = reader.nextEvent(); + webSite.setCategory(nextEvent.asCharacters().getData()); + break; + case "status": + nextEvent = reader.nextEvent(); + webSite.setStatus(nextEvent.asCharacters().getData()); + break; + } + } + if(nextEvent.isEndElement()){ + EndElement endElement = nextEvent.asEndElement(); + if(endElement.getName().getLocalPart().equals("website")){ + webSites.add(webSite); + } + } + } + } catch (XMLStreamException xse){ + System.out.println("XMLStreamException"); + xse.printStackTrace(); + } catch (FileNotFoundException fnfe) { + System.out.println("FileNotFoundException"); + fnfe.printStackTrace(); + } + return webSites; + } + +} diff --git a/xml/src/main/java/com/baeldung/xml/stax/WebSite.java b/xml/src/main/java/com/baeldung/xml/stax/WebSite.java new file mode 100644 index 0000000000..8f7782ab91 --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/stax/WebSite.java @@ -0,0 +1,40 @@ +package com.baeldung.xml.stax; +public class WebSite { + + private String url; + private String name; + private String category; + private String status; + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/xml/src/test/java/com/baeldung/xml/stax/StaxParserUnitTest.java b/xml/src/test/java/com/baeldung/xml/stax/StaxParserUnitTest.java new file mode 100644 index 0000000000..7629487e11 --- /dev/null +++ b/xml/src/test/java/com/baeldung/xml/stax/StaxParserUnitTest.java @@ -0,0 +1,31 @@ +package com.baeldung.xml.stax; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.List; + +import org.junit.Test; + + +public class StaxParserUnitTest { + + @Test + public void givenWebsitesXML_whenParsed_thenNotNull() { + List websites = StaxParser.parse("src/test/resources/xml/websites.xml"); + assertNotNull(websites); + } + + @Test + public void givenWebsitesXML_whenParsed_thenSizeIsThree() { + List websites = StaxParser.parse("src/test/resources/xml/websites.xml"); + assertTrue(websites.size() == 3); + } + + @Test + public void givenWebsitesXML_whenParsed_thenLocalhostExists() { + List websites = StaxParser.parse("src/test/resources/xml/websites.xml"); + assertEquals(websites.get(2).getName(),"Localhost"); + } +} diff --git a/xml/src/test/resources/xml/websites.xml b/xml/src/test/resources/xml/websites.xml new file mode 100644 index 0000000000..579c13eb94 --- /dev/null +++ b/xml/src/test/resources/xml/websites.xml @@ -0,0 +1,18 @@ + + + + Baeldung + Online Courses + Online + + + Example + Examples + Offline + + + Localhost + Tests + Offline + + \ No newline at end of file From 0eedbaa5f4da4570137da7105dd82a9089817a3d Mon Sep 17 00:00:00 2001 From: pazis Date: Wed, 28 Aug 2019 11:00:23 +0000 Subject: [PATCH 3/3] stax fix --- .../com/baeldung/xml/stax/StaxParser.java | 65 ++++++++++--------- .../baeldung/xml/stax/StaxParserUnitTest.java | 4 +- 2 files changed, 38 insertions(+), 31 deletions(-) diff --git a/xml/src/main/java/com/baeldung/xml/stax/StaxParser.java b/xml/src/main/java/com/baeldung/xml/stax/StaxParser.java index 6c06bfdb17..9e3b5e8b0f 100644 --- a/xml/src/main/java/com/baeldung/xml/stax/StaxParser.java +++ b/xml/src/main/java/com/baeldung/xml/stax/StaxParser.java @@ -1,4 +1,5 @@ package com.baeldung.xml.stax; + import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.List; @@ -16,52 +17,58 @@ import javax.xml.namespace.QName; public class StaxParser { public static List parse(String path) { - List webSites = new ArrayList(); - WebSite webSite = null; + List websites = new ArrayList(); + WebSite website = null; XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); try { XMLEventReader reader = xmlInputFactory.createXMLEventReader(new FileInputStream(path)); - while(reader.hasNext()){ + while (reader.hasNext()) { XMLEvent nextEvent = reader.nextEvent(); - if (nextEvent.isStartElement()){ + if (nextEvent.isStartElement()) { StartElement startElement = nextEvent.asStartElement(); - switch (startElement.getName().getLocalPart()) { - case "website": - webSite = new WebSite(); - Attribute url = startElement.getAttributeByName(new QName("url")); - if (url != null) { - webSite.setUrl(url.getValue()); - } - break; - case "name": - nextEvent = reader.nextEvent(); - webSite.setName(nextEvent.asCharacters().getData()); - break; - case "category": - nextEvent = reader.nextEvent(); - webSite.setCategory(nextEvent.asCharacters().getData()); - break; - case "status": - nextEvent = reader.nextEvent(); - webSite.setStatus(nextEvent.asCharacters().getData()); - break; + switch (startElement.getName() + .getLocalPart()) { + case "website": + website = new WebSite(); + Attribute url = startElement.getAttributeByName(new QName("url")); + if (url != null) { + website.setUrl(url.getValue()); + } + break; + case "name": + nextEvent = reader.nextEvent(); + website.setName(nextEvent.asCharacters() + .getData()); + break; + case "category": + nextEvent = reader.nextEvent(); + website.setCategory(nextEvent.asCharacters() + .getData()); + break; + case "status": + nextEvent = reader.nextEvent(); + website.setStatus(nextEvent.asCharacters() + .getData()); + break; } } - if(nextEvent.isEndElement()){ + if (nextEvent.isEndElement()) { EndElement endElement = nextEvent.asEndElement(); - if(endElement.getName().getLocalPart().equals("website")){ - webSites.add(webSite); + if (endElement.getName() + .getLocalPart() + .equals("website")) { + websites.add(website); } } } - } catch (XMLStreamException xse){ + } catch (XMLStreamException xse) { System.out.println("XMLStreamException"); xse.printStackTrace(); } catch (FileNotFoundException fnfe) { System.out.println("FileNotFoundException"); fnfe.printStackTrace(); } - return webSites; + return websites; } } diff --git a/xml/src/test/java/com/baeldung/xml/stax/StaxParserUnitTest.java b/xml/src/test/java/com/baeldung/xml/stax/StaxParserUnitTest.java index 7629487e11..587c2adf3b 100644 --- a/xml/src/test/java/com/baeldung/xml/stax/StaxParserUnitTest.java +++ b/xml/src/test/java/com/baeldung/xml/stax/StaxParserUnitTest.java @@ -20,12 +20,12 @@ public class StaxParserUnitTest { @Test public void givenWebsitesXML_whenParsed_thenSizeIsThree() { List websites = StaxParser.parse("src/test/resources/xml/websites.xml"); - assertTrue(websites.size() == 3); + assertEquals(3, websites.size()); } @Test public void givenWebsitesXML_whenParsed_thenLocalhostExists() { List websites = StaxParser.parse("src/test/resources/xml/websites.xml"); - assertEquals(websites.get(2).getName(),"Localhost"); + assertEquals("Localhost", websites.get(2).getName()); } }