Introduction to Java Programming and Data Structures  Comprehensive Version (11th Edition)
Introduction to Java Programming and Data Structures Comprehensive Version (11th Edition)
11th Edition
ISBN: 9780134700144
Author: Liang
Publisher: PEARSON
bartleby

Concept explainers

bartleby

Videos

Textbook Question
Book Icon
Chapter 24, Problem 24.1PE

(Implement set operations in MyList) The implementations of the methods addAll, removeAll, retainAll, toArray(), and toArray(T[]) are omitted in the MyList interface. Implement these methods. Test your new MyList class using the code at liveexample.pearsoncmg.com/test/ Exercise24_01Test.txt.

Expert Solution & Answer
Check Mark
Program Plan Intro

MyList

Program plan:

  • Import required packages.
  • Declare the main class named “Main”.
    • Give the main method “public static void main ()”.
      • Declare a default constructor and data members.
      • Prompt the user to get the input.
      • Print the value of list1 and list2.
      • Print the result by calling the function “addAll()”.
      • Print the value of list1 and list2.
      • Print the result by calling the method “removeAll()”.
      • Print the value of list1 and list2.
      • Print the result by calling the method “retainAll()”.
      • Print the value of list1 and list2.
      • Print the result by calling the method “containsAll()”.
    • Includes an interface “MyList”
      • Define a method to add a new element at the specified index in the list.
      • Define a method to return the element from this list at the specified index 
      • Define a method to return the index of the first matching element in this list.
      • Define a method to return the index of the last matching element in this list
      • Define a method to remove the element at the specified position in this list
      • Define a method to replace the element at the specified position in this list
      • Define a method to add a new element at the end of this list
      • Define a method to return true if this list contains no elements
      • Define a method to remove the first occurrence of the element e from this list
      • Define a method to check whether the elements are present or not
      • Define a method to add the elements in otherList to this list.
      • Define a method to retains the elements in this list that are also in otherList
    • Define a class “MyArrayList”.
      • Declare a variable “sum” and assign 0 to it.
      • Declare data members and default constructor.
      • Create a list from an array of object.
      • Define a method to add a new element at the specified index 
      • Define a method to create a larger array which is double the current size.
      • Define a method to clear the list.
      • Define a method to return true if the list contains the element.
      • Define a method to return the element at the specified index.
      • Define a method to trim the capacity to current size.
      • Define a method to return the number of element in the list.
Program Description Answer

The below program includes the methods addAll(), removeAll(), retainAll(), toArray(), and toArray(T[]) which were omitted in the MyList interface.

Explanation of Solution

Program:

//import required packages

import java.util.*;

//class definition

public class Exercise24_01 {

//define main method

public static void main(String[] args) {

new Exercise24_01();

}

//default constructor

public Exercise24_01() {

Scanner input = new Scanner(System.in);

//data members

String[] name1 = new String[5];

String[] name2 = new String[5];

String[] name3 = new String[2];

//prompt user to get the input

System.out.print("Enter five strings for array name1 separated by space: ");

for (int i = 0; i < 5; i++) {

name1[i] = input.next();

}

//prompt the user to get the input

System.out.print("Enter five strings for array name2 separated by space: ");

for (int i = 0; i < 5; i++) {

name2[i] = input.next();

}

//prompt user to get the input

System.out.print("Enter two strings for array name3 separated by space: ");

for (int i = 0; i < 2; i++) {

name3[i] = input.next();

}

MyList<String> list1 = new MyArrayList<>(name1);   

MyList<String> list2 = new MyArrayList<>(name2); 

//print the value of list1

System.out.println("list1:" + list1);

//print the value of list2

System.out.println("list2:" + list2);

//calling addAll function

list1.addAll(list2);

//print the result

System.out.println("After addAll:" + list1 + "\n");

list1 = new MyArrayList<>(name1);

list2 = new MyArrayList<>(name2); 

//print the value of list1

System.out.println("list1:" + list1);

//print the value of list2

System.out.println("list2:" + list2);

//calling removeAll function

list1.removeAll(list2);

//print the result

System.out.println("After removeAll:" + list1 + "\n");

list1 = new MyArrayList<>(name1);

list2 = new MyArrayList<>(name2); 

//print the value of list1

System.out.println("list1:" + list1);

//print the value of list2

System.out.println("list2:" + list2);

//calling the retainAll function

list1.retainAll(list2);

//print the result

System.out.println("After retainAll:" + list1 + "\n");

list1 = new MyArrayList<>(name1);

list2 = new MyArrayList<>(name2); 

//print the value of list1

System.out.println("list1:" + list1);

//print the value of list2

System.out.println("list2:" + list2);

//calling the retainAll function

list1.retainAll(list2);

//print the result

System.out.println("list1 contains all list2? " + list1.containsAll(list2) + "\n");

list1 = new MyArrayList<>(name1);

list2 = new MyArrayList<>(name3);

//print the value of list1

System.out.println("list1:" + list1);

//print the value of list2

System.out.println("list2:" + list2);

//print the result

System.out.println("list1 contains all list2? " + list1.containsAll(list2) + "\n");

Object[] name4 = list1.toArray();

//print the result

System.out.print("name4: ");

for (Object e: name4) {

System.out.print(e + " ");

}

String[] name5 = new String[list1.size()];

String[] name6 = list1.toArray(name5);

//print the result

System.out.print("\nname6: ");

for (Object e: name6) {

System.out.print(e + " ");

}

}

//includes the interface

public interface MyList<E> extends java.util.Collection<E> {

/* Add a new element at the specified index in this list */

public void add(int index, E e);

/*Return the element from this list at the specified index */

public E get(int index);

/*Return the index of the first matching element in this list. Return -1 if no match. */

public int indexOf(Object e);

/*Return the index of the last matching element in this list,  Return -1 if no match. */

public int lastIndexOf(E e);

/* Remove the element at the specified position in this list, Shift any subsequent elements to the left. Return the element that was removed from the list. */

public E remove(int index);

/* Replace the element at the specified position in this list, with the specified element and returns the new set. */

public E set(int index, E e);

@Override /* Add a new element at the end of this list */

public default boolean add(E e) {

add(size(), e);

return true;

}

@Override /* Return true if this list contains no elements */

public default boolean isEmpty() {

return size() == 0;

}

@Override /* Remove the first occurrence of the element e from this list. Shift any subsequent elements to the left, Return true if the element is removed. */

public default boolean remove(Object e) {

if (indexOf(e) >= 0) {

remove(indexOf(e));

return true;

}

else

return false;

}

@Override

/*method to check whether the elements are present or not */

public default boolean containsAll(Collection<?> c) {

for (Object e: c)

if (!this.contains(e))

return false;

return true;

}

/* Adds the elements in otherList to this list.

Returns true if this list changed as a result of the call */

@Override

public default boolean addAll(Collection<? extends E> c) {

for (E e: c)

this.add(e);

return c.size() > 0;

}

/* Removes all the elements in otherList from this list Returns true if this list changed as a result of the call */

@Override

public default boolean removeAll(Collection<?> c) {

boolean changed = false;

for (Object e: c) {

if (remove(e))

changed = true;

}

return changed;

}  

/* Retains the elements in this list that are also in otherList, Returns true if this list changed as a result of the call */

@Override

public default boolean retainAll(Collection<?> c) {

boolean changed = false;

for (int i = 0; i < this.size(); ) {

if (!c.contains(this.get(i))) {

this.remove(get(i));

changed = true;

}

else

i++;

}

return changed;

}

@Override

public default Object[] toArray() {

// Left as an exercise

Object[] result = new Object[size()];

for (int i = 0; i < size(); i++) {

result[i] = this.get(i);

}

//return statement

return result;

}

@Override

public default <T> T[] toArray(T[] a) {

// Left as an exercise

for (int i = 0; i < size(); i++) {

a[i] = (T)this.get(i);

}

//return statement

return a;

}

}

//class definition

public class MyArrayList<E> implements MyList<E> {

//data members

public static final int INITIAL_CAPACITY = 16;

private E[] data = (E[])new Object[INITIAL_CAPACITY];

private int size = 0;

// Create an empty list

public MyArrayList() {

}

//Create a list from an array of objects 

public MyArrayList(E[] objects) {

for (int i = 0; i < objects.length; i++)

add(objects[i]);

}

@Override /* Add a new element at the specified index */

public void add(int index, E e) {   

ensureCapacity();

/* Move the elements to the right after the specified index */

for (int i = size - 1; i >= index; i--)

data[i + 1] = data[i];

// Insert new element to data[index]

data[index] = e;

// Increase size by 1

size++;

}

/*Create a new larger array, double the current size + 1 */

private void ensureCapacity() {

if (size >= data.length) {

E[] newData = (E[])(new Object[size * 2 + 1]);

System.arraycopy(data, 0, newData, 0, size);

data = newData;

}

}

@Override // Clear the list

public void clear() {

data = (E[])new Object[INITIAL_CAPACITY];

size = 0;

}

@Override /*Return true if this list contains the element */

public boolean contains(Object e) {

for (int i = 0; i < size; i++)

if (e.equals(data[i])) return true;

return false;

}

@Override /*Return the element at the specified index */

public E get(int index) {

checkIndex(index);

return data[index];

}

private void checkIndex(int index) {

if (index < 0 || index >= size)

throw new IndexOutOfBoundsException

("Index: " + index + ", Size: " + size);

}

@Override /*Return the index of the first matching element in this list. Return -1 if no match. */

public int indexOf(Object e) {

for (int i = 0; i < size; i++)

if (e.equals(data[i])) return i;

return -1;

}

@Override /*Return the index of the last matching element in this list. Return -1 if no match. */

public int lastIndexOf(E e) {

for (int i = size - 1; i >= 0; i--)

if (e.equals(data[i])) return i;

return -1;

}

@Override /* Remove the element at the specified position in this list. Shift any subsequent elements to the left. Return the element that was removed from the list. */

public E remove(int index) {

checkIndex(index);

E e = data[index];

// Shift data to the left

for (int j = index; j < size - 1; j++)

data[j] = data[j + 1];

data[size - 1] = null;

// Decrement size

size--;

return e;

}

@Override /*Replace the element at the specified position in this list with the specified element. */

public E set(int index, E e) {

checkIndex(index);

E old = data[index];

data[index] = e;

return old;

}

@Override

public String toString() {

StringBuilder result = new StringBuilder("[");

for (int i = 0; i < size; i++) {

result.append(data[i]);

if (i < size - 1) result.append(", ");

}

return result.toString() + "]";

}

// Trims the capacity to current size 

public void trimToSize() {

if (size != data.length) { 

E[] newData = (E[])(new Object[size]);

System.arraycopy(data, 0, newData, 0, size);

data = newData;

} // If size == capacity, no need to trim

}

@Override /*Override iterator() defined in Iterable */

public java.util.Iterator<E> iterator() {

return new ArrayListIterator();

}

private class ArrayListIterator 

implements java.util.Iterator<E> {

// Current index 

private int current = 0; 

@Override

public boolean hasNext() {

return (current < size);

}

@Override

public E next() {

return data[current++];

}

@Override

public void remove() {

MyArrayList.this.remove(current);

}

}

@Override /* Return the number of elements in this list */

public int size() {

return size;

}

}

}

Sample Output

Enter five strings for array name1 separated by space: tom george peter jean jane

Enter five strings for array name2 separated by space: tom george michael michelle daniel

Enter two strings for array name3 separated by space: tom peter

list1:[tom, george, peter, jean, jane]

list2:[tom, george, michael, michelle, daniel]

After addAll:[tom, george, peter, jean, jane, tom, george, michael, michelle, daniel]

list1:[tom, george, peter, jean, jane]

list2:[tom, george, michael, michelle, daniel]

After removeAll:[peter, jean, jane]

list1:[tom, george, peter, jean, jane]

list2:[tom, george, michael, michelle, daniel]

After retainAll:[tom, george]

list1:[tom, george, peter, jean, jane]

list2:[tom, george, michael, michelle, daniel]

list1 contains all list2? false

list1:[tom, george, peter, jean, jane]

list2:[tom, peter]

list1 contains all list2? true

name4: tom george peter jean jane 

name6: tom george peter jean jane 

Want to see more full solutions like this?

Subscribe now to access step-by-step solutions to millions of textbook problems written by subject matter experts!
Students have asked these similar questions
What are the major threats of using the internet? How do you use it? How do children use it? How canwe secure it? Provide four references with your answer. Two of the refernces can be from an article and the other two from websites.
Assume that a string of name & surname is saved in S. The alphabetical characters in S can be in lowercase and/or uppercase letters. Name and surname are assumed to be separated by a space character and the string ends with a full stop "." character. Write an assembly language program that will copy the name to NAME in lowercase and the surname to SNAME in uppercase letters. Assume that name and/or surname cannot exceed 20 characters. The program should be general and work with every possible string with name & surname. However, you can consider the data segment definition given below in your program. .DATA S DB 'Mahmoud Obaid." NAME DB 20 DUP(?) SNAME DB 20 DUP(?) Hint: Uppercase characters are ordered between 'A' (41H) and 'Z' (5AH) and lowercase characters are ordered between 'a' (61H) and 'z' (7AH) in the in the ASCII Code table. For lowercase letters, bit 5 (d5) of the ASCII code is 1 where for uppercase letters it is 0. For example, Letter 'h' Binary ASCII 01101000 68H 'H'…
What did you find most interesting or surprising about the scientist Lavoiser?

Additional Engineering Textbook Solutions

Find more solutions based on key concepts
Knowledge Booster
Background pattern image
Computer Science
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
SEE MORE QUESTIONS
Recommended textbooks for you
Text book image
EBK JAVA PROGRAMMING
Computer Science
ISBN:9781337671385
Author:FARRELL
Publisher:CENGAGE LEARNING - CONSIGNMENT
Text book image
C++ Programming: From Problem Analysis to Program...
Computer Science
ISBN:9781337102087
Author:D. S. Malik
Publisher:Cengage Learning
Text book image
Np Ms Office 365/Excel 2016 I Ntermed
Computer Science
ISBN:9781337508841
Author:Carey
Publisher:Cengage
Text book image
Programming Logic & Design Comprehensive
Computer Science
ISBN:9781337669405
Author:FARRELL
Publisher:Cengage
Text book image
New Perspectives on HTML5, CSS3, and JavaScript
Computer Science
ISBN:9781305503922
Author:Patrick M. Carey
Publisher:Cengage Learning
Text book image
Systems Architecture
Computer Science
ISBN:9781305080195
Author:Stephen D. Burd
Publisher:Cengage Learning
Java Math Library; Author: Alex Lee;https://www.youtube.com/watch?v=ufegX5o8uc4;License: Standard YouTube License, CC-BY